HDU-2097

主要考察进制转换

 

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.
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<cstdlib>
 6 #include<algorithm>
 7 using namespace std;
 8 
 9 int main()
10 {
11     int x,t,n,i,b;
12     char a[100];
13     char c[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
14     while(cin>>n&&n!=0)
15     {
16         int cnt=0;
17         cnt+=n/1000;cnt+=((n/100)%10);cnt+=((n%100)/10);cnt+=n%10;
18         t = n;
19         t = (int)fabs((double)t);
20         for (i = 0;; i++)
21         {
22             b = t%16;
23             if (b >= 10)
24                 a[i] = c[b - 10];
25             else
26                 a[i] = b + '0';
27             t = (t - b) / 16;
28             if (t == 0)
29                 break;
30         }
31         int cnt1=0;
32         for(int j=0;j<=i;j++)
33         {
34             if(a[j]>='A'&&a[j]<='G') {a[j]-='7';}
35             if(a[j]>='0'&&a[j]<='9') {a[j]-='0';}
36             cnt1+=a[j];
37         }
38         t = n;
39         t = (int)fabs((double)t);
40         for (i = 0;; i++)
41         {
42             b = t%12;
43             if (b >= 10)
44                 a[i] = c[b - 10];
45             else
46                 a[i] = b + '0';
47             t = (t - b) / 12;
48             if (t == 0)
49                 break;
50         }
51         int cnt2=0;
52         for(int j=0;j<=i;j++)
53         {
54             if(a[j]>='A'&&a[j]<='G') {a[j]-='7';}
55             if(a[j]>='0'&&a[j]<='9') {a[j]-='0';}
56             cnt2+=a[j];
57         }
58         if(cnt==cnt1&&cnt==cnt2) cout<<n <<" is a Sky Number."<<endl;
59         else cout<<n <<" is not a Sky Number."<<endl;
60     }
61     return 0;
62 }
View Code
1234 is not a Sky Number.
posted @ 2015-01-27 12:14  一方风景  阅读(165)  评论(0)    收藏  举报