PAT (Basic Level) Practice || 1017 A除以B (20 分)
作者:互联网
题目描述:
本题要求计算 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;
}
标签:输出,PAT,运算,Level,Practice,num,printf,被除数,10 来源: https://blog.csdn.net/qq_54515850/article/details/117753940