九度oj 题目1125:大整数的因子

题目描述:

已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k.

输入:

若干个非负整数c,c的位数<=30
每行一个c,当c=-1时中止
(不要对-1进行计算!)

输出:

每一个c的结果占一行
1) 若存在满足 c%k == 0 的k,输出所有这样的k,中间用空格隔开,最后一个k后面没有空格。
2) 若没有这样的k则输出"none"

样例输入:
30
72
13
-1
样例输出:
2 3 5 6
2 3 4 6 8 9
none
提示:

注意整数溢出问题
不要对-1进行计算

 1 #include <cstdio>
 2 #include <string>
 3 #include <cstring>
 4 #define MAX 33
 5 
 6 char c[MAX];
 7 
 8 bool div(int k) {
 9     int ci  = 0;
10     for(int i = 0; i < strlen(c); i++) {
11         int ben = ci * 10 + (c[i] - '0');
12         ci = ben % k;
13     }
14     if(ci == 0) {
15         return true;
16     }
17     return false;
18 
19 }
20 
21 int main(int argc, char const *argv[])
22 {
23     while(scanf("%s",c) != EOF && strcmp(c,"-1") != 0) {
24         bool isBegin = false;
25         bool isFind = false;
26         for(int i = 2; i <= 9; i++) {
27             if(div(i)) {
28                 isFind = true;
29                 if(!isBegin) {
30                     printf("%d",i);
31                     isBegin = true;
32                 }
33                 else {
34                     printf(" %d",i);
35                 }
36                 
37             }
38         }
39         if(!isFind) {
40             puts("none");
41         }
42         else {
43             puts("");
44         }
45         
46     }
47     return 0;
48 }

 

posted @ 2016-08-05 09:39  Jason杰  阅读(633)  评论(0)    收藏  举报