考察大数运算,不过用unsigned long long也可以做…我嫌有一点麻烦就没用(毕竟比起求每一位是几,我还是更愿意算一个简单的破乘法)
#include <bits/stdc++.h>
using namespace std;
struct bigNum
{
char s[32];
int digit;
};
int d1[10];
int d2[10];
int main(void)
{
bigNum a;
scanf("%s",a.s);
a.digit=strlen(a.s);
memset(d1,0,sizeof(d1));
memset(d2,0,sizeof(d2));
for(int i=0;i<a.digit;i++)
d1[a.s[i]-'0']++;
int c=0,temp;
for(int i=a.digit-1;i>=0;i--)
{
temp=(a.s[i]-'0')*2+c;
if(temp>=10) c=1;
else c=0;
a.s[i]=(temp%10)+'0';
}
if(c==1)
{
printf("No\n1");
printf("%s",a.s);
}
else
{
for(int i=0;i<a.digit;i++)
d2[a.s[i]-'0']++;
bool flag=true;
for(int i=0;i<10;i++)
if(d1[i]!=d2[i]) flag=false;
if(flag) printf("Yes\n");
else printf("No\n");
printf("%s",a.s);
}
}