题目描述
已知正整数 k 满足 2≤k≤9,给定一个长度不超过 30 位的十进制非负整数 c,求所有能整除 c 的 k。
输入格式
输入包含多组测试数据。
每组数据占一行,包含一个非负整数 c。
当输入一行为 c=−1 时,输入结束。
输出格式
每组数据输出一行。
按从小到大的顺序,输出所有满足 c 的 k,数字之间用单个空格隔开。如果不存在满足条件的 k,则输出 none。
数据范围
0≤c<1030,
输入最多包含 100 组数据。
样例
输入样例:
30
72
13
-1
输出样例:
2 3 5 6
2 3 4 6 8 9
none
C++ 代码
#include<iostream>
#include<vector>
using namespace std;
bool div(vector<int> A,int b) // 判断b是否可以整除给定的整数A
{
int n=A.size(),r=0; // r表示余数
for(int i=0;i<n;i++)
{
r=r*10+A[i];
r%=b;
}
if(r==0) return true; // 如果余数为零
else return false;
}
int main()
{
string s;
while(cin>>s,s!="-1")
{
int n=s.size();
vector<int> A;
bool check=false; // 标记是否有输出
for(int i=0;i<n;i++) A.push_back(s[i]-'0'); // 将整数s存放数组A中
for(int i=2;i<=9;i++)
if(div(A,i))
{
cout<<i<<' ';
check=true; // 标记为已输出
}
if(!check) cout<<"none"; // 如果没有输出输出"none"
cout<<endl;
}
return 0;
}