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
解题思路:
题目大意:给定一个大数,判断翻倍后的数在不考虑位置时与其是否有相同的数字和出现次数。
大数运算调用BigInteger类的方法,判断出现次数可以用数组模拟哈希表,前后运算检验最后数组是否都为0。
java代码:
import java.io.*;
import java.math.BigInteger;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
BigInteger bignum = new BigInteger(str);
BigInteger multiply = bignum.multiply(new BigInteger("2"));
int []arr = new int[10];
String s = multiply + "";
for(int i = 0; i < s.length();i++) {
arr[s.charAt(i) - '0']++;
}
for(int i = 0; i < str.length();i++) {
arr[str.charAt(i) - '0']--;
}
for(int i = 0; i < arr.length;i++) {
if(arr[i] != 0) {
System.out.println("No");
System.out.println(s);
System.exit(0);
}
}
System.out.println("Yes");
System.out.println(s);
}
}