题目描述
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
方法
解题思路
A 除以 B,我们可以发现一个规律,除开第一位,我们都是用前面除下来的余数乘以 10 再加上当前位上的数作为被除数。
但是第一位有两种情况,如果够除,则用第一位上的数作为被除数;如果不够除,则需要向后借一位来作为被除数。所以我们循环开始的位置取决于第一位是否够除。
还有一个特别情况:就是如果 A 只有一位,是个位数,则刚刚上面的算法就不适用了,需要我们单独进行判断,当然也要分两种情况进行判断。
代码
#include <iostream>
using namespace std;
int main() {
string A;
int B;
cin >> A >> B;
int Q, R;
if(A.size() == 1) {
if(A[0] < B) {
cout << 0 << " " << A[0] - 48;
} else {
cout << (A[0] - 48) / B << " " << (A[0] - 48) % B;
}
return 0;
}
int sum = 0;
int first = 0;
if(sum < B) {
sum = A[0] - 48;
first = 1;
}
for(int i = first; i < A.size(); i++) {
sum = sum * 10 + A[i] - 48;
Q = sum / B;
cout << Q;
R = sum % B;
sum = R;
}
cout << " " << R;
return 0;
}