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.
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int N = sc.nextInt();
if(N==0)
break;
System.out.print(N);
int x=N%10; int y=N/10;
int sum=x;
while(y>0){
x=y%10;
y=y/10;
sum+=x;
}
if(jinz(N,12)==jinz(N,16)&&jinz(N,16)==sum){
System.out.println(" is a Sky Number.");
}else{
System.out.println(" is not a Sky Number.");
}
}
}
private static int jinz(int N, int R) {
int sum=0;
if (N < 0) {
N = -N;
System.out.print("-");
}
int x = N / R;
int y = N % R;
int chs[] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };
int[] a = new int[50];
int i = 0;
a[0] = N % R;
while (x != 0) {
i++;
y = x % R;
a[i] = y;
x = x / R;
}
int b[] = new int[i + 1];
for (int k = 0; k < i + 1; k++) {
// System.out.print(a[k]+" a");
b[k] = a[i - k];
// System.out.print(b[k]+" ");
}
for (int j = 0; j < b.length; j++) {
sum+=chs[b[j]];
}
return sum;
}
}