1023. Have Fun with Numbers (20)

    xiaoxiao2025-01-12  17

    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<string> #include<string.h> using namespace std; string add(string, string); int main(){ int ori_num[10]; int ans_num[10]; memset(ori_num, 0, sizeof(int)* 10); memset(ans_num, 0, sizeof(int)* 10); string ori, ans; cin >> ori; ans = add(ori, ori); int length[2] = { 0, 0 }; length[0] = ori.size(); length[1] = ans.size(); for (int i = 0; i < length[0]; i++){//统计数中0~9分别出现过多少次 ori_num[ori[i] - '0'] ++; } for (int i = 0; i < length[1]; i++){ ans_num[ans[i] - '0'] ++; } for (int i = 0; i < 10; i++){ if (ans_num[i] != ori_num[i]){ cout << "No" << ans << endl; break; } if (i == 9){ cout << "Yes\n" << ans <<endl; } } return 0; } string add(string a, string b){ char ans[30]; int length = a.size();//同一个数,所以位数相同 int carry = 0; for (int i = length-1; i >=0; i--){ ans[i] = a[i] + b[i] - '0' + carry; if (ans[i] - '0' > 9){ ans[i] -= 10; carry = 1; } else carry = 0; } ans[length] = 0; string ret = ans; if (carry == 1)//最高位有可能有进位 ret = "1"+ret; return ret; }

    转载请注明原文地址: https://ju.6miu.com/read-1295393.html
    最新回复(0)