当前位置: 代码迷 >> 综合 >> PAT (Basic Level) Practice || 1017 A除以B (20 分)
  详细解决方案

PAT (Basic Level) Practice || 1017 A除以B (20 分)

热度:36   发布时间:2023-11-29 11:37:02.0

题目描述:

本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。

输入格式:

输入在一行中依次给出 A 和 B,中间以 1 空格分隔。

输出格式:

在一行中依次输出 Q 和 R,中间以 1 空格分隔。

输入样例:

123456789050987654321 7

输出样例:

17636684150141093474 3

解题思路:

本题需要我们模拟一下做除法题时的思路(因为给出A是1000位的正整数数,计算机不允许任何类型的变量存放这么大的数):从被除数的最高位开始除起,若该位小于除数则与下一位合成一个两位数进行运算,运算得余数与下一位结合继续运算,若整除则继续下一位运算,直到被除数运算至末尾为止。

所以需要我们进行循环,如果被除数该位数值大于除数,则输出一个除得的结果,若小于则把这个数乘10与下一位相加再除,此位写0。到第一个不为0的数开始输出,若没有不为0的则说明除不开,需要输出一个0。最后输出余数即可。

下面是我AC后的代码:

#include<stdio.h>
#include<string.h>int main()
{int i, w=0, x=0, r=0, k=0;char num[1010];memset(num, 0, sizeof(num));scanf("%s%d", num, &x);w = strlen(num);for(i=0;i<w;i++){if((r*10+num[i]-48) >= x){printf("%d", (r*10+num[i]-48)/x);r = (r*10+num[i]-48)%x, k=1;}else{if(k) printf("0");r = num[i]-48;continue;}}if(!k) printf("0");printf("\x20%d\n", r);return 0;
}

 

  相关解决方案