思路:
其实就是模拟以下运算过程, 我们定义string类型的A,和一个int类型的B,然后for循环遍历A中的每一个数字(注意减去‘0’得到的才是真正的数字),拿这个数字去除以B,得到的结果不要保存,因为1000位存储不下,所以我们直接将得到的数字给输出,而不是存储后再输出。我们定义R 用来存储余数,得到余数后判断A[i+1]是否存在,如果存在,我们给移下来(这是数学上的做法),代码上的做法就是R *10 + A[i+1]。如果不存在,那就不用管了。这里有几个坑,需要说一下:
1,我们需要定义一个bool 类型的output,用来判断可不可以进行输出,在得到非零数字前,我们都是不能进行输出的,例如:120/2,得到的是60,而不是060,当得到第一个非零数字时,我们让output等于true,然后后面得都能进行输出即可。
2,第二个坑就是人家得到的结果就是0,按照第一个坑改了以后,这个就会有问题,例如:0/2, 得到的是0,还没得到非零,我们的output就是false,还不会进行输出,这就得到了错误的结果。但是造成这个结果只有一种可能,就是我们的被除数小于除数,已知除数是一位的,那就意味着被除数也是一位的,所以我们在for循环之前加上一个if判断,如果A的size等于1,那么我们就直接输出,然后return就行,不走下面的流程,如果不等于1,那就继续走下面的流程
需要掌握的点:
字符和整型运算
代码:
#include<iostream>
#include<string>
using namespace std;
int main() {
string A;
int B;
cin >> A >> B;
int Q = 0;
bool output = false;
int R = A[0] - '0';
if (A.size() == 1) {
cout << A[0] / B<< " " << A[0] % B;
return 0;
}
for (int i = 0; i < A.size(); i++) {
Q = R / B;
if (Q != 0) {
output = true;
}
if (output == true) {
cout << Q;
}
R = R % B;
if (A[i + 1]) {
R = R * 10 + A[i + 1] - '0';
}
}
cout << " " << R << endl;
}