PAT1017 A除以B
题目
本题要求计算A/B,其中A是不超过 1000 位的正整数,B是 1 位正整数。你需要输出商数Q和余数R,使得A=B×Q+R成立。
输入格式
输入在一行中依次给出A和B,中间以 1 空格分隔。
输出格式
在一行中依次输出Q和R,中间以 1 空格分隔。
输入样例
输出样例
思路
被除数很大,所以用字符串存好一点,除数只有一位用int
,然后模拟手算除法:对每一位数都与除数相除,余数和下一位数合起来进行下一次除,直到最后一位。用递归思路比较清晰。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| #include <stdio.h> #include <cstring> char a[1000]; short b; int chu(int yu, int wei) { if(!(strlen(a) - wei)) { return yu; } printf("%d", (10 * yu + a[wei] - 48) / b); int t = (10 * yu + a[wei] - 48) % b; return chu(t, ++wei); }
int main(int argc, char const *argv[]) { scanf("%s %d", &a, &b); if (strlen(a) == 1) { printf("%d %d\n", (a[0] - 48) / b, (a[0] - 48) % b); return 0; } if(a[0] - 48 >= b) { printf(" %d",chu(0, 0)); } else { printf(" %d", chu(a[0] - 48, 1)); } return 0; }
|