大数除法并求余,目前没问题
作者:互联网
#include<stdio.h>
#include<string.h>
int main()
{
printf("输入exit退出");
while(1)
{
printf("\n--------------------------------------------------------------------------\n");
char x1[100],y1[100];
int x[100]={0},y[100]={0},z[100]={0};
int xr,yr,i,j,sum=0,n1=0,n2=0,can=0,a;
printf("输入1:\n");
scanf("%s",x1);
if(strcmp(x1,"exit")==0)
return 0;
printf("输入2:\n");
scanf("%s",y1);
if(strcmp(y1,"exit")==0)
return 0;
if(strcmp(y1,"0")==0)
{
printf("分母不能是0");
continue;
}
for(i=0;i<strlen(x1);i++)//把char转换成int
x[i]=x1[i]-'0';
i--;
xr=i; //记录尾下标
for(j=0;j<strlen(y1);j++)
y[j]=y1[j]-'0';
j--;
yr=j;
//核心代码 ↓
for(i=0;i<=xr-yr;)
{ if(i>0 && x[i-1]>0)
can=1;
else
for(j=0;j<=yr;j++)
{
if(x[i+j]>y[j])//说明被除数大
{
can=1;
break;
}
if(x[i+j]<y[j])//说明除数大
{
can=0;
break;
}
if(j==yr)//说明两者一样
{
can=1;
break;
}
}
if(can==1)
{
for(a=yr;a>=0;a--)
{
sum=x[i+a]-y[a];
if(sum>=0)
x[i+a]=sum;
else
{
x[i+a]=10+sum;
x[i+a-1]+=-1;
}
}
z[i]+=1;
}
else
i++;
}
// ↑
printf("结果\n商:");
for(n1=0;z[n1]==0;n1++) ; //找什么时候不是0开头
if(n1>xr-yr)
{
printf("不能计算小数");
continue;
}
else
for(i=n1;i<=xr-yr;i++)
printf("%d",z[i]);
printf("\n余数:");
for(n1=0;x[n1]==0;n1++) ; //找什么时候不是0开头
if(n1>xr) //什么都不剩,所以余数是0
printf("%d",0);
else
for(i=n1;i<=xr;i++)
printf("%d",x[i]);
}
}
标签:并求,大数,sum,else,printf,y1,n1,100,除法 来源: https://blog.csdn.net/weixin_50977370/article/details/122808951