题目描述
已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k.
输入描述:
若干个非负整数c,c的位数<=30 每行一个c
输出描述:
每一个c的结果占一行 1) 若存在满足 c%k == 0 的k,输出所有这样的k,中间用空格隔开,最后一个k后面没有空格。 2) 若没有这样的k则输出"none" 注意整数溢出问题 不要对-1进行计算
示例1
输入
30 72 13 -1
输出
2 3 5 6 2 3 4 6 8 9 none
思路:大数求余
#include<iostream>
#include<string>
using namespace std;
int get_rem(string s,int x)
{
int rem=0;
for(int i=0;i<s.size();i++)
{
int temp=s[i]-'0'+rem*10;
s[i]=temp/x+'0';
rem=temp%x;
}
if(rem)
return rem;
else
return 0;
}
int main()
{
string s;
while(cin>>s&&s!="-1")
{
int sum=0;
for(int i=2;i<10;i++)
{
if(get_rem(s,i)==0)
{
cout<<i<<" ";
sum++;
}
}
if(!sum)
cout<<"none";
else
cout<<endl;
}
return 0;
}