题目描述
本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。
输入描述
输入在1行中依次给出A和B,中间以1空格分隔。
输出描述
在1行中依次输出Q和R,中间以1空格分隔。
输入例子
123456789050987654321 7
输出例子
17636684150141093474 3
代码
#include <stdio.h>
int main(){
char a1[1001],a2[1001]; //因为可能有1000个数字,所以使用字符串
int b,r=0,i,c,j=0;
scanf("%s %d",a1,&b);
for(i=0;a1[i]!='\0';i++){ //开始模拟笔算
c=r*10;
a2[j]=((a1[i]-48+c)/b)+48; //将每一位的商数都记住
r=(a1[i]-48+c)%b;
j++; //下表要增加
}
a2[j]='\0';
if(a2[0]=='0'){ //如果商数的第一位是‘0’
if(j==1){ //如果给出的数字是只有1位数
printf("%c %d",a2[0],r);
}
else{
printf("%s %d",a2+1,r); //如果给出的不止一位数
}
}
else{ //如果商数的第一位不是‘0’
printf("%s %d",a2,r);
}
return 0;
}
我的分析
这道题的题目很短,但是却是很费时间来思考的。一开始看到题时,我以为就是简单的除法运算,考虑到可能给出的数值较大,所以定义时使用的是long long,但是在提交后才发现我是too young too simple,系统给出的最大是有1000个数字的超大的数呀!,所以才发现这道题不能来用整型来计算,要用数组。我写这道题的整体思路是根据在纸上的笔算来进行的,这里可能无法用文字解释清楚,但是如果自己动手笔算再结合着给出的代码,就一定能够理解的
网友评论