欢迎一块在练习的小伙伴们的讨论
- 1017 A除以B (20分)
- 难点1:输入为不超过1000位的正整数
- 难点2:商中为0的值的输出
- 测试点2/4对应的处理是难点2的处理
- 在本代码中,利用对if条件做处理来解决的这一问题
- 解决:按照竖式除法的思路进行运算
# include<iostream>
using namespace std;
int main() {
string num1;
int num2;
cin >> num1 >> num2;
int tmp = num1[0] - '0';
for (int i = 0; i < num1.length(); i++) {
// 解析if的条件
// i + 1 != num1.length()是为了对余数进行输出
// i != 0 是为了解决当首位为0时0位的输出
if ( i + 1 != num1.length() && i != 0 ) {
cout << tmp / num2;
// 移项补位操作(是利用除的余数*10+下一位)
tmp = (tmp % num2) * 10 + num1[i + 1] - '0';
}
else {
if (i + 1 == num1.length()) {
cout << tmp / num2;
cout << " " << tmp % num2 << endl;
break;
}
// 移项补位操作(首位直接补成两位数,进行出发输出,避免首位除不动的情况)
tmp = tmp * 10 + num1[i + 1] - '0';
}
}
return 0;
}