- 题目描述:
-
已知正整数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 }