分值 : 20 难度 : 简单string题 思路 : 因为有20位数字,因此需要用string处理。 坑点 : 自己设置进位标志Cy,然后一步步运算。 评语 : 细心一点,考虑完全边界情况就好。
12345678910111213141516171819202122232425262728293031323334353637383940414243
#include <iostream>#include <string>#include <algorithm>using namespace std ;int data[10] ;int main() { string s ; cin >> s ; for(int i = 0 ; i< s.size(); i++) { data[s[i]-'0'] ++ ; } string s2 ; int cy = 0 ; for(int i = s.size()-1 ; i>= 0 ; i--) { int value = s[i] - '0' ; value= value* 2 + cy ; if(value >= 10) { cy = 1 ; s2 += '0'+ value%10 ; } else { cy = 0 ; s2 += '0' +value%10 ; } } if(cy) s2+='1' ; for(int i = 0 ; i< s2.length() ; i++) data[s2[i]-'0'] --; int flag = 0 ; for(int i = 0 ; i<10 ;i++) if(data[i]) flag= 1 ; if(flag) cout <<"No"<<endl ; else cout <<"Yes"<<endl ; reverse(s2.begin() ,s2.end()); cout << s2 <<endl ;}