题目描述
已知正整数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
输出
2 3 5 6
2 3 4 6 8 9
none
#include<bits/stdc++.h>
using namespace std;
int r=0;
struct bign{
int d[10005];
int len;
bign(){
memset(d, 0, sizeof(d));
len = 0;
}
};
bign divide(bign a, int b){
bign c;
c.len = a.len;
for(int i = a.len-1; i >= 0; i--){
r = r * 10 + a.d[i];
c.d[i] = r / b;
r = r % b;
}
while(c.len-1>=1 && c.d[c.len-1] == 0){
c.len--;
}
return c;
}
int main(){
string str;
bign u,s;
while(cin>>str){
if(str=="-1") break;
vector<int> ans;
u.len = str.size();
for(int i=0;i<str.size();i++){
u.d[i] = str[u.len-i-1] - '0';
}
for(int i=2;i<=9;i++){
r = 0;
divide(u, i);
if(r==0) ans.push_back(i);
}
if(ans.size() == 0){
cout<<"none"<<endl;
}else{
for(int i=0;i<ans.size();i++){
if(i>0) cout<<" ";
cout<<ans[i];
}
cout<<endl;
}
}
return 0;
}