高精四则运算及求模运算(四)

高精四则运算及求模运算之高精度除法

题目描述
输入两个整数 a,b,输出它们的商。

输入格式
两行,第一行是被除数,第二行是除数。

输出格式
一行,商的整数部分。

输入输出样例
输入

10
2

输出

5

思路:先定义一个字符数组来存储字符串,定义两个整型数组来存储两个被除数和商;接着将被除数存入整型数组中且下标从1开始,然后利用同余定理求商,再接着就是对商进行删除前导零,(注意点是删除前导零时i不能等于被除数的len,防止商为0的情况被删去!)最后输出商即可。本题是高精/单精,但是我的代码只考虑到了正整数的,虽然ac了可能是此题后台测试数据没有负数的原因吧,但是如果加上负数进行运算,就要分好几种情况来讨论,代码和思路就会更复杂一点了.

#include 
using namespace std;
const int MAXN = 5e3+4;
char a[MAXN];
int a0[MAXN];
int b[MAXN];
long long c,len,lef,lenb;//lef代表余数
int main(){
    cin>>a>>c;
    len = strlen(a);
    //将被除数存入数组a0中
    for(int i = 1;i <= len;i++){
        a0[i] = a[i-1] - '0';
    }
    //利用同余定理求商
    for(int i = 1;i <= len;i++){
        b[i] = (lef*10 + a0[i])/c;
        lef = (lef*10 + a0[i])%c;
    }
    lenb = 1;
    //删除前导零
    for(int i = 1;i < len;i++){
        if(b[i]==0 && lenb < len)
            lenb++;
        else
            break;
    }
    //打印出商
    for (int i=lenb;i<=len;i++)
        cout<<b[i];
    return 0;
}

你可能感兴趣的:(#,高精度,c++,算法)