大整数的因子

时间:2022-03-16 04:20:27

总时间限制: 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 }