C语言大整数除法

时间:2025-02-14 12:09:33

和大整数幂一样伪大整数除法,第一个是大整数第二个为普通整数,且不考虑被除数比除数小的情况以及为0的情况 究极伪(这里除数和被除数有点搞混了小学没学好)
思路,既然除数是普通整数那么就可以直接利用整数的加间乘除,同样还是模拟人算,找到人算规律,用c语言实现它
举个例子吧,怕你懒得在纸上算,12345234234除23,先拿第一位和23直接比较,小,则1*10加上下一位也就是2变成12,
12还是小那就再乘10加上下一位变成123,这时就大于23了就直接用123/23得到第一个商或者说商的第一位,接着用123%23得到减去后的值(我不知道减了还剩啥就用sum代替)sum,
再将sum*10加上下一位之后就是同样的方法,但是但是but有个小细节,在得到第一次商之后任意一次如果sum=sum*10+上下因为仍小于23也就是被除数手算的化就要上0,接着下一位,sum(更新了的)就得又乘一次10,然后加上下一位然后再和23比较,接着就是同样的步骤 请配合下面代码食用会理解的更容易,纯代码可以在我的另一篇大整数运算(加减乘除次幂)里面

#include <>
int main()
{
    char a[1000];//大整数用字符串存下来
    int n;//被除数
    scanf("%s%d",a,&n);
    int b[1000];//接下来就是将字符串转化为一位位整数;
    int ll=strlen(a);
    for(int i=0;i<ll;i++)
        b[i]=a[i]-'0';
    sd(b,n,ll);
}
void sd(int *a, int n, int ll)//开始操作
{
    int sum=0,p=0,l;//用sum保存除数的值,p来记录是否为找到第一位商的情况(因为在找到第一位商之前不用上0而是直接下一位
    //l用来保存余数
    for(int i=0;i<ll;i++)//这里我没有将商存下来而是找到一位就输出
    {
        sum+=a[i];
        if(sum<n&&p)
        {
            l=sum;//记录有可能最后加上最后一位还是小于n的情况的余数,这个时候这个位置的商也是0
            printf("0");//输出商位0 的情况
        }
        if(sum>=n)
        {
            printf("%d",sum/n);
            sum%=n;//这里就是sum-(sum/n)*n
            l=sum;//记录最后加上最后一位大于n的情况的余数
            sum*=10;
            p=1;//在找到第一位商之后改变p的状态
        }
        else sum*=10;
    }
    printf("\n");
    printf("%d",l);//把余数输出
}