题解 | #大整数的因子#
大整数的因子
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")
查看13道真题和解析