描述
已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k。
输入
一个非负整数c,c的位数<=30。
输出
若存在满足 c%k == 0 的k,从小到大输出所有这样的k,相邻两个数之间用单个空格隔开;若没有这样的k,则输出"none"。
样例输入
30
样例输出
2 3 5 6
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char c[40]= {0};
int str[30]= {0},result[30]= {0};
int i=1,k=0,count=0,len;
int j=0;
scanf("%s",c);
len=strlen(c);
for(i=0; i<len; i++)
{
result[len-i-1]=c[i]-'0';//转化为整型
}
for (k=2; k<=9; k++)
{
for (j=0;j<len;j++)
{
str[j]=result[j];//复制一个数组,后面数组改变,需要一个临时数组
//这个方法有些笨,如果你们有更好的方法可以评论区留言(一时想不到其他的方法)
}
for (i=len-1; i>=0; i--)
{
if (str[i]%k!=0&&i!=0)
{
str[i-1]=str[i]%k*10+str[i-1];//每次除的时候都要保留本位除时的余数,如果余数不等于0,是要将得到余数*10与后一位前位数字相加
}
if (i==0)//最后个位能否被除尽的判断
{
if(str[i]%k==0)
printf("%d ",k);
else if (str[i]%k!=0)
count++;
}
}
}
if(count==8)
printf("none");
return 0;
}