您的位置:首页 > 其它

1023. Have Fun with Numbers (20)

2018-03-18 12:00 531 查看

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

PS:大数模拟乘法即可,但是有一个坑就是输入有前置0,即001234567899,输出不能有前置0
#include<bits/stdc++.h>
using namespace std;

int num_int1[10],num_int2[10];
char num[30],num2[30];

int main()
{
int carry ;

while(cin >> num){
memset(num2,0,sizeof(num2));
memset(num_int1,0,sizeof(num_int1));
memset(num_int2,0,sizeof(num_int2));
for(int i = 0; i < strlen(num); i++){
num_int1[num[i]-'0']++;
}
carry = 0;
for(int i = strlen(num)-1; i >= 0; i--){
int n = num[i]-'0';
int tmp = 2*n+carry;
num2[i] = tmp%10+'0';
num_int2[tmp%10]++;
carry = tmp / 10;
}

if (carry != 0){
cout << "No" << endl;
cout << carry  ;
}
else{
int flag = 1;
for(int i = 0; i < 10; i++){
if (num_int1[i] != num_int2[i]){
cout << "No" << endl;
flag = 0;
break;
}
}
if (flag)
cout << "Yes" << endl;

}
bool z = 0;
for(int i = 0;i < strlen(num);++i)
{
if(num2[i]-'0' == 0 && z == 0)
continue;
if(num2[i]-'0') z = 1;
printf("%d",num2[i]-'0');
}
cout << endl;
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: