题目简介
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样例:
输出样例:
思路:
模拟除法的过程,从第一位开始一个数字一个数字去除,留下商的结果,将余数乘10+下一位数字再去除,反复该过程即可。
tip:
- 由于第一位数字过小时,商为0,但答案中第一位数字不能为0,所以需要特别判定一下。
代码如下:
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 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| #include <iostream> #include <string> #include <vector> #include <algorithm> #include <unordered_map> #include <cmath>
using namespace std;
int main() { string A; int B;
string Q; int R;
cin >> A >> B;
int num = A[0] - '0';
int i = 1; while (i < A.size()) {
int shang = num / B;
if (i == 1 && shang == 0) {
num = num * 10 + A[i] - '0'; i++; continue; }
Q += to_string(shang);
int yu = num % B; num = yu * 10 + A[i] - '0';
i++; }
Q += to_string(num / B); R = num % B;
cout << Q << " " << R; }
|