PTA basic 1017 A除以B (20 分) c语言实现(gcc)

本题要求计算 /,其中 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 }

 




posted @ 2021-04-20 23:11  keiiha  阅读(228)  评论(0编辑  收藏  举报