题解 | #大整数的因子#
大整数的因子
https://www.nowcoder.com/practice/3d6cee12fbf54ea99bb165cbaba5823d
思路:
计算机模拟手算除法取模运算
- 用字符串存储大数;
- 将c从高位开始,每一位对k取模,temp记录模;
- 将temp*10 与下一位相加,重复第2步,直到temp取到c的个位;
- 若temp%k==0,说明c可以整除k。
#include <iostream> using namespace std; int main() { string c; while (cin >> c) { // 注意 while 处理多个 case //判断是否是-1,如果是则退出 if (c[0] == '-' && c[1] == '1') exit(0); bool flag = false; //标记是否有因子,默认值false 没有因子 int temp; //用于记录高位的模 for (int k = 2; k <= 9; k++){ temp = c[0] -'0'; //初值为数值的第一位 for (int i = 1; i < c.size(); i++){ temp = (c[i]-'0') + (temp % k)*10; } //如果最后一位取模后为0,说明该数c可以整除k if (temp % k == 0){ cout<<k<<" "; flag = true; } } if (!flag) cout<<"none"<<endl; else if(flag) cout<<endl; } } // 64 位输出请用 printf("%lld")