PAT乙级1017(A/B)简单高精度
1.问题描述:
2.算法分析:
这道题目是最近看到PAT乙级的一道题目,大概是这么个思想,明显1000位超过了long long,我们需要用字符串来存储数组,但是因为除数只是个位数,我们只需要模拟除法过程即可,首先我们要考虑到特殊情况,如字符串的长度为1时,那么商就应该是第一个字符与除数相除,那么商就应该是第一个字符与除数mod,对于特判后,我们应该考虑字符串长度大于1时,我们就模拟除法。
比如题目123456取输入的前6个字符
此时,
商 | 余数 |
---|---|
1 / 7 = 0 | 1 % 7 = 1 |
余数 * 10 + 当前字符 - ‘0’ / 7 | 余数 * 10 + 当前字符 - ‘0’ %7 |
一直模拟就可以了。
3.AC代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
int chu;
cin >> s >> chu;
int shang,yu;
if (s.size() == 1 || (s[0] - '0') >= chu) {
cout << (s[0] - '0') / chu;
yu = (s[0] - '0') % chu;
} else {
yu = (s[0] - '0');
}
for (int i = 1; i < s.size(); i++) {
shang = (yu * 10 + s[i] - '0') / chu;
yu = (yu * 10 + s[i] - '0') % chu;
cout << shang;
}
cout << " " << yu;
return 0;
}