总时间限制: 1000ms 内存限制: 65536kB
描述
已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k。
输入一个非负整数c,c的位数<=30。输出若存在满足 c%k == 0 的k,从小到大输出所有这样的k,相邻两个数之间用单个空格隔开;若没有这样的k,则输出"none"。样例输入
30
样例输出
2 3 5 6
1 #include <stdio.h> 2 int main(int argc, char *argv[]) 3 { 4 char cTemp[40]; 5 int c[40],b[10]={0},i,k,len; 6 int m; 7 int s,j; 8 9 scanf("%s",cTemp); 10 i=0; 11 while(cTemp[i]!='\0') 12 { 13 c[i]=cTemp[i]-'0'; 14 i++; 15 } 16 17 len=i; 18 for(k=2;k<=9;k++) 19 { 20 if(k==2&&c[len-1]%2==0) { b[k]=1; continue; } 21 else if(k==3) 22 { 23 s=0; 24 for(j=0;j<len;j++) s=s+c[j]; 25 if(s%3==0) { b[k]=1; continue; } 26 } 27 else if(k==5&&c[len-1]%5==0) { b[k]=1; continue; } 28 else 29 { 30 m=c[0]%k; 31 i=1; 32 while(i<len) 33 { 34 m=m*10+c[i]; 35 m=m%k; 36 i++; 37 } 38 if(m==0) { b[k]=1; continue; } 39 } 40 } 41 42 s=0; 43 for(k=2;k<=9;k++) 44 { 45 if(b[k]==1) { printf("%d ",k); s++;} 46 } 47 if(s==0) printf("none"); 48 printf("\n"); 49 return 0; 50 }