原题:1023. Have Fun with Numbers (20)
解题思路:给的数字比较大,用高精度整数解决即可。
代码如下:
#include<cstdio>
#include<cstring>
using namespace std;
const int N = 10;
int main()
{
int a[N], b[N];
for(int i = 0; i < N; i++)
{
a[i] = 0;
b[i] = 0;
}
char s[21];
int num[21];
scanf("%s", s);
int len = strlen(s);
int c = 0; //进位
for(int i = len - 1; i >= 0; i--)
{
a[s[i] - '0'] ++;
b[((s[i] - '0') * 2 + c) % 10] ++;
num[i] = ((s[i] - '0') * 2 + c) % 10; //保存2倍的结果
c = (s[i] - '0') * 2 / 10;
}
if(c == 1)
b[c]++;
int flag = 0;
for(int i = 0; i < N; i++)
{
if(b[i] != a[i])
flag = 1;
}
if(flag)
printf("No\n");
else
printf("Yes\n");
if(c != 0)
printf("%d", c);
for(int i = 0; i < len ; i++ )
printf("%d", num[i]);
printf("\n");
return 0;
}