思路
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")