PAT-A-1023. Have Fun with Numbers (20)

xiaoxiao2021-02-27  477

1023. Have Fun with Numbers (20)

时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue

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 file 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 #include<iostream> #include<cstdio> #include<string.h> using namespace std; struct bignum { int d[30]; int len; bignum() { memset(d, 0, sizeof(d)); len = 0; } }; bignum Change(char str[]) { bignum a; a.len = strlen(str); for (int i = 0; i < a.len; i++) { a.d[i] = str[a.len - 1 - i] - '0'; } return a; } bignum Mul(bignum a, int b) { bignum c; int carry = 0; int temp; for (int i = 0; i < a.len; i++) { temp = a.d[i] * b + carry; c.d[c.len++] = temp % 10; carry = temp / 10; } while (carry != 0) { c.d[c.len++] = carry % 10; carry = carry / 10; } return c; } int Judge(bignum a, bignum b) { int count[10] = { 0 }; for (int i = 0; i < a.len; i++) { count[a.d[i]]++; } for (int i = 0; i < b.len; i++) { count[b.d[i]]--; } int flag = 1; for (int i = 0; i < 10; i++) { if (count[i] != 0) { flag = 0; break; } } return flag; } int main() { char str[21]; cin >> str; bignum a = Change(str); bignum mul = Mul(a, 2); if (Judge(a, mul)) cout << "Yes" << endl; else cout << "No" << endl; for (int i = mul.len - 1; i >= 0; i--) cout << mul.d[i]; system("pause"); return 0; }
转载请注明原文地址: https://www.6miu.com/read-291.html

最新回复(0)