题目:
Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, with no duplication. Double it we will obtain 246913578, which happens to be another 9-digit number consisting exactly the numbers from 1 to 9, only in a different permutation. Check to see the result if we double it again!
Now you are suppose to check if there are more numbers with this property. That is, double a given number with k digits, you are to tell if the resulting number consists of only a permutation of the digits in the original number.
Input Specification:
Each input contains one test case. Each case contains one positive integer with no more than 20 digits.
Output Specification:
For each test case, first print in a line "Yes" if doubling the input number gives a number that consists of only a permutation of the digits in the original number, or "No" if not. Then in the next line, print the doubled number.
Sample Input:
1234567899
Sample Output:
Yes
2469135798
题意:输入一个由1-9组成的不超过20位的数字,判断这个数1-9出现的次数是否与这个数的两倍一样
思路:因为是不超过20位的数字,所以必须使用BigInteger类
代码:
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
BigInteger b = sc.nextBigInteger();
//乘以二之前记录每位数的出现次数
int[] cnt1 = new int[10];
String s = b.toString();
for (int i = 0; i < s.length(); i++) {
cnt1[s.charAt(i) - '0']++;
}
//这个数乘以二再转化为字符串
s = b.multiply(new BigInteger("2")).toString();
//统计乘以二后的数记录每位数的出现次数
int[] cnt2 = new int[10];
for (int i = 0; i < s.length(); i++) {
cnt2[s.charAt(i) - '0']++;
}
System.out.println(check(cnt1, cnt2) ? "Yes" : "No");
System.out.println(s);
}
//比较每位出现次数是否一样
public static boolean check(int[] cnt1, int[] cnt2) {
for (int i = 0; i < 10; i++) {
if (cnt1[i] != cnt2[i]) return false;
}
return true;
}
}
注意:比较时需要比较0的个数
特例:
input:
512874
output:
No
1025748