#include <bits/stdc++.h>
using namespace std;
int main() {
string A;
int B, Q, R;
cin >> A >> B;
// 第一位没有上一位直接 / 并得到余数为当前位剩余
// 当只有一位A时也直接输出
if((A[0] - '0') > B || A.size() == 1){
// 得到当前位结果并输出
Q = (A[0] - '0') / B;
A[0] = (A[0] - '0') % B + '0';
cout << Q;
}
// 循环 获取上一位i-1作为十位 当前位i为个位
for(int i = 1; i < A.size(); i++){
Q = (((A[i-1] - '0') * 10) + A[i] - '0') / B;
A[i] = (((A[i-1] - '0') * 10) + A[i] - '0') % B + '0';
cout << Q;
}
cout << " " << A[A.size()-1];
}
#include <bits/stdc++.h>
using namespace std;
int main() {
string A;
int B, Q, R;
cin >> A >> B;
// 第一位没有上一位直接 / 并得到余数为当前位剩余
Q = (A[0] - '0') / B;
R = (A[0] - '0') % B;
// 被除数小于除数 && 只有一位A时 直接输出
if((A[0] - '0') > B || A.size() == 1) {
cout << Q;
}
// 循环 获取上一位i-1作为十位 当前位i为个位
for(int i = 1; i < A.size(); i++) {
// 上一位余数进位*10
Q = (R * 10 + A[i] - '0') / B;
R = (R * 10 + A[i] - '0') % B;
cout << Q;
}
cout << " " << R;
}
下面的版本比上面的要化简一些,体现在用 R 替代了 上一位数 ((A[i-1] - '0') * 10) 的计算。而因为后面的循环要用到R,所以一开始也需要算一遍 R,在判断前面,不然进入循环的时候没有 R 的数值。
Q = (A[0] - '0') / B;
A[0] = (A[0] - '0') % B + '0';
而上面的版本因为直接从字符串中获取,所以就可以把这两个计算,放在一位A和除数小于被除数的判断里面。因为后面的循环也直接从原字符串里面获取数据的。