题解 | 大整数的因子(大整数取余一个小整数)
大整数的因子
https://www.nowcoder.com/practice/3d6cee12fbf54ea99bb165cbaba5823d
思路
30位超过long long 能够表示的范围,因此需要用通过string 实现大整数除法。
· 大整数除法思路
举个例子:123%3==0
大整数计算思路:
例子:123%3==0; ------------------------------------------- res = 0; [第一位:1] res = res*10+第一位 = 0*10+1 = 1; res = res%3 = 1; [第二位:2] res = res*10+第二位 = 1*10+2 = 12; res = res%3 = 0; [第三位:3] res = res*10+第三位 = 0*10+3 = 3; res = res%3 = 0; ------------------------------------------- 从高位到低位遍历结束 && res==0 说明此时的整数能被3整除
Code
#include <iostream>
#include <vector>
#include <limits>
using namespace std;
bool isDivisable(string num, int divider) {
int total = 0;
for(int i = 0; i<num.length(); i++) {
int t = (num[i]-'0');
total = total*10 + t;
total %= divider;
}
if(total==0) return true;
else return false;
}
int main() {
string num;
while (cin >> num) {
if (num=="-1") break;
vector<int> res;
for (int i = 2; i<=9; i++) {
if (isDivisable(num, i)) {
res.push_back(i);
}
}
if (res.empty()) {
cout << "none" << endl;
}
for (auto it = res.begin(); it!=res.end();) {
cout << (*it);
if (++it == res.end()) cout << endl;
else cout << " ";
}
}
}
// 64 位输出请用 printf("%lld")


查看20道真题和解析