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
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int origin_map[10], cal_map[10];
void counter(string numbers, int map[]){
for(auto c : numbers){
int num = c -'0';
map[num] ++;
}
}
string doubleNumber(string numbers){
vector<int> numberArray;
reverse(numbers.begin(),numbers.end());
for(auto c : numbers){
if(c >= '0' && c <= '9'){
numberArray.push_back(c - '0');
}
}
int carry = 0;
string res;
for(vector<int>::iterator it = numberArray.begin(); it != numberArray.end(); it++){
int twice = *it * 2;
*it = (twice + carry) % 10;
res = char(*it + '0') + res;
carry = twice / 10;
}
if (carry) res = "1" + res;
return res;
}
int main() {
string origin_str,cal_str;
cin >> origin_str;
cal_str = doubleNumber(origin_str);
counter(origin_str,origin_map);
counter(cal_str,cal_map);
bool flag = true;
for(int i = 0; i < 10 ; i++){
if(origin_map[i] != cal_map[i]){
flag = false;
break;
}
}
if(flag) cout << "Yes" << endl;
else cout << "No" << endl;
cout << cal_str;
return 0;
}
总结
1. 利用vector来记录数字的累加结果方便确定位数。
2. vector的遍历与访问需要巩固。