本题要求计算 /,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
123456789050987654321 7
17636684150141093474 3
解题思路
1.输入的A远超过整型,所以用字符数组存储 因为输出只需要商和余数,不需要存储结果,所以从高位开始直接模拟除法运算然后按次序输出每一位的商值,最后输出余数就可以
2.需要注意的地方有:(1)边界问题,如果A只有一位且小于B,必须要输出一个0作为商 (2)如果A第一位小于B但是不止一位数字的话,就需要省略输出第一位除B产生的0
1 #include "stdio.h" 2 #include "string.h" 3 //模拟除法过程 4 int main(){ 5 char a[1001]; 6 int i=0,b,numerator=0,remainder=0,quotient=0,len;//numerator 被除数 quotient 商 remainder 余数 7 scanf("%s %d",a,&b); 8 len=strlen(a); 9 numerator=a[0]-‘0‘; 10 if((numerator>=b&&len!=1)||(numerator<b&&len==1)){ 11 //对第一位数字要进行特殊处理,如果第一位数字大等于B且不是个位数 12 //则输出第一位对B除法得到的商 13 //如果第一位数字小于B且是个位数,则输出0,如果小于B且A不是个位数则跳过不输出0 14 quotient=numerator/b; 15 remainder=numerator%b; 16 numerator=remainder; 17 printf("%d",quotient); 18 } 19 for(i=1;i<len;i++){ 20 numerator=numerator*10+(a[i]-‘0‘);//被除数变为十位数后加入后一位数字 21 if(numerator>=b){ 22 quotient=numerator/b;//求商 23 remainder=numerator%b;//取余 24 numerator=remainder;//更新被除数为余数 25 printf("%d",quotient); 26 }else{ 27 printf("0"); 28 } 29 } 30 printf(" %d\n",remainder);//输出余数 31 return 0; 32 }
PTA basic 1017 A除以B (20 分) c语言实现(gcc)
原文:https://www.cnblogs.com/ichiha/p/14683355.html