高精度与低精度的除法

思路:

将除数看作整体。先将大数的第一个高位与除数作比较,如果小于除数(不够除)则该位商为零,并将该位乘以10加上下一位的值保存到余数中(即上一位的余数乘以10加上该步的位的值);如果大于或等于除数(够除),则商即为对应除后的商,余数为对应余数。计算完后要注意高位可能有多余的零,要忽视这些零,但要保证有一位输出(同高精度减法)。

注意:除法从高位开始计算!

代码:

复制代码
#include<cstdio>
#include<cstring>

struct bign{
    int d[1000];
    int len;
    bign(){
        memset(d,0,sizeof(d));
        len=0;
    }
};

bign change(char str[]){
    bign a;
    a.len=strlen(str);
    for(int i=0;i<a.len;i++){
        a.d[i]=str[a.len-1-i]-'0';
    }
    return a;
}

bign div(bign a,int num,int &r){
    bign b;
    b.len=a.len;//被除数的每一位与商的每一位一一对应 
    for(int i=a.len-1;i>=0;i--){
        r=r*10+a.d[i];
        if(r<num){
            //不够除
            b.d[i]=0; 
        }
        else{
            b.d[i]=r/num;
            r%=num;
        }
    }
    while(b.len-1>=1 && b.d[b.len-1]==0){
        //去掉高位零,同时保证有一位数输出 
        b.len--;
    }
    return b; 
}

void print(bign a){
    for(int i=a.len-1;i>=0;i--){
        printf("%d",a.d[i]);
    }
}

int main()
{
    char str[1000];
    int r=0;//r为余数
    int num;
    scanf("%s%d",str,&num);
    bign a=change(str);
    print(div(a,num,r));
    printf("\n余数为:%d",r);
    return 0;
}
View Code
复制代码

 

posted @   顾南  阅读(99)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示