hdu 2097 Java Sky數

YX_blog發表於2015-08-17

點選開啟連結

Sky數

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


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.
 
思路:

題目的意思很簡單,就是求某個數的10,12,16,進位制的位數的和加起來,是否等於同一個數,然後按要求輸出。

package cn.hncu.acm;

import java.util.Scanner;

public class p2097 {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext()){
			int n=sc.nextInt();
			int m=n;//n的值多複製幾個,後面轉換16,12進位制的時候每次需要改變
			int k=m;
			if(n==0){
				break;
			}
			int a,b,c,d,sum=0;
			//四位數
			int sum1=0,sum2=0;
			a=n/1000;//取千位數,  
			b=(n-a*1000)/100;//取百位數   還可以寫出  b =n%1000/100;
			c=(n-a*1000-b*100)/10;//取十位數   同樣  等價於 c=n%100/10;
			d= n%10;//取個位數
			sum=a+b+c+d;//所有位數的和加起來
			   
			//求十六進位制數 
			while(n>0){
				a=n%16;
				sum1 += a;//求得的位數加起來。
				n=n/16;
			}
		
			
			/<span style="color:#ff0000;">/n在上面求16進位制的時候改變了,所以這時候就是多複製的好處了,m
			/*  這個就要注意了,千萬不能這樣寫,這樣寫會出現一個漏洞,就是當10,16進位制的和相等,
			 * 但是和12,進位制的不等,就會出現問題************後面自己改動了就過了</span>
			if(sum!=sum1){
				System.out.println(k+" is not a Sky Number.");
				continue;
			}*/
			
			//求12 進位制
			while(m>0){
				b=m%12;
				sum2+=b;
				m=m/12;
			}
			
			//滿足條件就符合條件了
			if(sum==sum2&&sum2==sum1){
			System.out.println(k+" is a Sky Number.");
			}e<span style="color:#ff0000;">lse{
					System.out.println(k+" is not a Sky Number.");
			}</span>
		}
	}
}



相關文章