题目描述:
已知正整数k满足2≤k≤9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k。
输入:
一个非负整数c,c的位数≤30。
输出:
若存在满足 c%k==0 的k,从小到大输出所有这样的k,相邻两个数之间用单个空格隔开;若没有这样的k,则输出"none
"。
输入样例:
30
输出样例:
2 3 5 6
做题思路:
在这道题中,我们需要做除法运算,除法就不像其他的从个位开始计算,要从高位开始除,然后记录每次除完的余数,再依次往下除,最后一次循环后的余数如果为0,即这个就是我们需要的数。由于会出现不存在可以被c整除的k,所以要定义一个临时变量用于标记是否有满足条件的k。
具体代码如下:
#include <bits/stdc++.h>
using namespace std;
int main(){
char c[31];
int a[30];//数组a用于倒序存储整数c
cin>>c;
int l=strlen(c);//获取字符数组c的长度,即整数的位数
int s=0;//用于标记是否存在这样的k,s==1表示存在
for(int i=0;i<l;i++){
a[i]=c[l-i-1]-'0';//倒序存储
}
for(int k=2;k<=9;k++){
int jw=0;//存储余数
for(int i=l-1;i>=0;i--){
int t=jw*10+a[i];
jw=t%k;//更新余数
}
if(jw==0){
s=1;//存在
cout<<k<<" ";//最后一次循环的余数即为最终余数,若余数为0,能整除
}
}
if(s==0) cout<<"none"<<endl;
return 0;
}