杭電(hdu)2097 Sky數

Sky數

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 17086    Accepted Submission(s): 9773


Problem 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.
 

Source
 
主要考察的是進制轉換,掌握了進制轉換,也就是水題一道了,呵呵!!
代碼如下:
#include <iostream>
#include <cstring>
#include <stack>
using namespace std;

stack<int> s;
void hex(int x,int y)
{
	int r=1;
	while(x)
	{
		r=x%y;
		s.push(r);
		x=x/y;
	}
}

int main()
{
	int n,sum1,sum2,sum3;
	while(cin>>n,n)
	{
		int k=n;
		sum1=sum2=sum3=0;
		while(k)
		{
			sum1+=k%10;
			k=k/10;
		}
		hex(n,12);
		while(!s.empty())
		{
			sum2+=s.top();
			s.pop();
		}
		hex(n,16);
		while(!s.empty())
		{
			sum3+=s.top();
			s.pop();
		}
		if(sum1==sum2&&sum2==sum3)
		cout<<n<<" is a Sky Number."<<endl;
		else cout<<n<<" is not a Sky Number."<<endl;
	}
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章