高精度除法 题解

文章目录

题目

在这里插入图片描述

Code

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int M=1e5+5;
char s[M],result[M];
int main(){
    long long mod,divis;
    long long n,i,k,flag,len;
    cin>>s>>n;  //输入被除数s以及除数n
    len=strlen(s);
    divis=flag=0;
    for(i=k=0;i<len;i++){
        divis=divis*10+s[i]-'0';
        if(divis>=n&&!flag){ //利用除法性质,当divs大于除数n时,开始进行整除
            result[k++]=divis/n+'0';
            divis=divis%n; //除法性质,余数*10加下一位的数字便是新的被除数
            flag=1;
        }
        else if(flag){
            result[k++]=divis/n+'0';
            divis=divis%n;
        }
    }
    if(!k) result[k++]='0';
    result[k]='\0';
    cout<<result<<endl;
    mod=0;
    for(i=0;i<len;i++){
        mod=mod*10+s[i]-'0';
        mod=mod%n; //利用除法性质,其实质是每次都是一个最多比n多一位的mod对n进行求余
    }
    cout<<mod<<endl;
    return 0;
}

原网站:高精度除法(一)

发布了14 篇原创文章 · 获赞 8 · 访问量 1156

猜你喜欢

转载自blog.csdn.net/Horse_Lake/article/details/104004183