题目描述
已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k.
输入描述:
若干个非负整数c,c的位数<=30
每行一个c
输出描述:
每一个c的结果占一行
- 若存在满足 c%k == 0 的k,输出所有这样的k,中间用空格隔开,最后一个k后面没有空格。
- 若没有这样的k则输出"none"
注意整数溢出问题
不要对-1进行计算
示例1
输入
30
72
13
-1
输出
2 3 5 6
2 3 4 6 8 9
none
题目解析:还是多位数的问题,因为30位的十进制数机器无法全部显示,所以使用字符串代替,再逐步计算。和大数阶乘实际上类似。
代码:
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<map>
#include<set>
#include<vector>
using namespace std;
int main()
{
string number;
while(cin >> number){
if(number == "-1"){
break;
}
int count = 0; //记录是否有因子
for(int i = 2 ; i <= 9 ; i++){
int k = 0;
for(int j = 0 ; j < number.size(); j++){
k = ((number[j] - '0') + k * 10) % i; //高位剩下的数*10+低一位 再继续进行求解
}
if(k == 0){ //可以整除
count++;
cout << i << " ";
}
}
if(count == 0){
cout << "none" << " ";
}
cout << endl;
}
return 0;
}