这里采用字符形式处理,但需要注意最后一个进位值不为0的情况。
另外注意题目不仅要求出现的数字一样,还要求出现的次数一样。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
Created by HarvestWu on 2018/4/29.
*/
int main()
{
char c[25];//接收初始值
int num[25];//存取加倍后数据
int flag[10] = {0};//记录初始值每个数字出现次数
int flag2[10] = { 0 };//记录加倍后每个数字出现次数
int p = 0;//进位值
int count = 0, t, flag1 = 0;
gets(c);
for (int i = strlen(c) - 1; i >= 0; i--)
{
t = (c[i] - '0');
flag[t]++;//记录初始值每个数字出现次数
t = (t * 2 + p);
num[count++] = t % 10;
p = t / 10;
}
if (p)//还有进位
num[count++] = p;
for (int i = 0; i < count; i++)
flag2[num[i]]++;//记录加倍后每个数字出现次数
for (int i = 0; i < count; i++)
{
if (flag[num[i]] != flag2[num[i]])//数字出现次数不同
{
printf("No\n");
flag1 = 1;
break;
}
}
if (!flag1)
printf("Yes\n");
for (int i = count-1; i >= 0; i--)
printf("%d",num[i]);
return 0;
}