和大整数幂一样伪大整数除法,第一个是大整数第二个为普通整数,且不考虑被除数比除数小的情况以及为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);//把余数输出
}