思路:
计算机模拟手算除法取模运算
- 用字符串存储大数;
- 将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")

京公网安备 11010502036488号