http://www.patest.cn/contests/pat-a-practise/1023
注意点:题目中的数不超过20位,而64位long long整型只有19位,所以这里采用字符数组的形式保存整数的每一位,难点在于字符数组乘以2怎么实现。
#include <iostream>
#define maxn 25
using namespace std;
int main()
{
int a[10]={0},A[10]={0}; char b[maxn];
char ch; int cnt=1;
while(cin>>ch){
++a[ch-'0'];
b[cnt]=ch;
++cnt;
}
b[0]='0';
int flag=0;
for(int i=cnt-1;i>0;--i){
if(b[i]-'0'>4){
b[i]='0'+(b[i]-'0')*2-10+flag;
++A[b[i]-'0'];
flag=1;
if(i==1){
b[0]='1';
}
}else{
b[i]+=(b[i]-'0')+flag;
++A[b[i]-'0'];
flag=0;
}
}
if(b[0]!='0'){
++A[b[0]-'0'];
}
int equ=1;
for(int i=0;i<10;++i){
if(a[i]!=A[i]){
equ=0;
cout<<"No\n";
break;
}
}
if(equ==1){
cout<<"Yes\n";
}
int sta=0;
if(b[0]=='0'){
sta=1;
}
for(int i=sta;i<cnt;++i){
cout<<b[i];
}
return 0;
}