本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
题目分析
1.不超过1000位的正整数:int ,long,long long都无法完全包含,只能用数组存放
代码设计
一.存储数据
char number[1001];
int len,i=0,b;
while((number[i++]=getchar())!=' ');//这里用getchar将A储存进number
number[i-1]='\0';
scanf("%d",&b);
len=strlen(number);
int num[len],q[len],R;
for(i=0;i<len;i++) //这里通过字符和数字的ASCII关系,将字符转换为数字存储
num[i]=number[i]-'0';
这一段代码我参考了别人的思想:先用字符数组存放大数,再将字符数组转换为int型数组
二.除法
int temp1=0,temp2=0,count=0; //count是计数器对输出有用
for(i=0;i<len;i++)
{
temp1=(num[i]+temp2*10)/b; //temp1存放每次除完后的商
temp2=(num[i]+temp2*10)%b; //temp2存放每次除完后的余数
q[count++]=temp1;
if(i==len-1) R=temp2;
}
三.输出
有两个坑:1.当商为多位时,如01123151,则不输出第一个数组成员
2.当商为一位时,输出即可(我一开始未考虑到一位的情况)
for(i=0;i<len;i++)
{
if(count>1) //这里count表示商的位数
{
if(q[i]!=0&&i==0) printf("%d",q[i]);//这里是对第一个坑的限制
if(i>0) printf("%d",q[i]);
}
if(count==1) printf("%d",q[i]);
}
printf(" %d",R);