CDZSC_2015寒假新人(2)——数学

Description

Sky从小喜欢奇特的东西,而且天生对数字特别敏感,一次偶然的机会,他发现了一个有趣的四位数2992,这个数,它的十进制数表示,其四位数字之和为2+9+9+2=22,它的十六进制数BB0,其四位数字之和也为22,同时它的十二进制数表示1894,其四位数字之和也为22,啊哈,真是巧啊。Sky非常喜欢这种四位数,由于他的发现,所以这里我们命名其为Sky数。但是要判断这样的数还是有点麻烦啊,那么现在请你帮忙来判断任何一个十进制的四位数,是不是Sky数吧。 
 

Input

输入含有一些四位正整数,如果为0,则输入结束。 
 

Output

若n为Sky数,则输出“#n is a Sky Number.”,否则输出“#n is not a Sky Number.”。每个结果占一行。注意:#n表示所读入的n值。 
 

Sample Input

2992 1234 0
 

Sample Output

2992 is a Sky Number. 1234 is not a Sky Number.
 
 
题解:进制转换 10->16, 10->12,再求出各位之和。详见代码。
 
 1 #include <cstdio>
 2 #include <cstring>
 3 
 4 int sum(int n, int m)
 5 {
 6     int tmp = 0;
 7     while(n > 0)
 8     {
 9         tmp += n % m;
10         n /= m;
11     }
12     return tmp;
13 }
14 
15 int main()
16 {
17 #ifdef CDZSC_OFFLINE
18     freopen("in.txt", "r", stdin);
19     freopen("out.txt", "w", stdout);
20 #endif
21     int n, a, b, c;
22     while(~scanf("%d", &n) && n)
23     {
24         a = sum(n, 10);
25         b = sum(n, 16);
26         c = sum(n, 12);
27         printf("%d%s
", n, (a == b && a == c) ? " is a Sky Number." : " is not a Sky Number.");
28     }
29     return 0;
30 }
View Code
原文地址:https://www.cnblogs.com/LiuACG/p/4246936.html