http://pat.zju.edu.cn/contests/pat-a-practise/1023
模拟乘法。用hash思想统计数字数量。
// 当输出部分正确,且出现“烫烫烫烫烫烫烫烫烫烫”的时候,肯定是字符数组忘了加'\0'。
//
//
#include <stdio.h>
#include <string.h>
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("E:\\in.txt", "r", stdin);
// freopen("E:\\out.txt", "w", stdout);
#endif
char row[25];
char dou[25];
int hash1[10], hash2[10];
memset(hash1, 0, sizeof(hash1));
memset(hash2, 0, sizeof(hash2));
scanf("%s", row);
int len = strlen(row);
int i, flag=0; // 进位
for(i=len-1; i>= 0; i--)
{
int num = row[i]-'0';
num = num*2 + flag;
if(num > 9)
{
dou[i] = num - 10 + '0';
flag = 1;//产生进位
}
else
{
dou[i] = num + '0';
flag = 0;//没有进位
}
}
dou[len]=0;
if(1 == flag)//计算后有进位,必不同
{
printf("No\n");
printf("1");
printf("%s\n", dou);
return 0;
}
for(i=0; i<len; i++)
{
hash1[row[i]-'0']++;
}
for(i=0; i<len; i++)
{
hash2[dou[i]-'0']++;
}
flag = 1;
for(i=0; i<10; i++)
{
if(hash1[i] != hash2[i])
{
flag = 0;
}
}
if(0 == flag)
{
printf("No\n");
printf("%s\n", dou);
}
else
{
printf("Yes\n");
printf("%s\n", dou);
}
return 0;
}