建议使用结构体引用或指针作为函数传递参数。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct bign{
int d[1000];
int len;
bign(){
memset(d,0,sizeof(d));
len=0;
}
};
void change(char str[],bign& a){
a.len=strlen(str);
for(int i=0;i<a.len;i++){
a.d[i]=str[a.len-1-i]-'0';
}
}
void multi(bign &a,int b,bign &res){
int carry=0;
for(int i=0;i<a.len;i++){
int t=a.d[i]*b+carry;
res.d[res.len++]=t%10;
carry=t/10;
}
while(carry!=0){
res.d[res.len++]=carry%10;
carry/=10;
}
}
int Hash[10];
int main(void){
char str[50];
scanf("%s",str);
bign a,res;
change(str,a);
multi(a,2,res);
if(a.len==res.len){
for(int i=0;i<a.len;i++){
Hash[a.d[i]]++;
Hash[res.d[i]]--;
}
int i;
for(i=0;i<10;i++){
if(Hash[i]){
printf("No\n");
break;
}
}
if(i==10) printf("Yes\n");
}else{
printf("No\n");
}
for(int i=res.len-1;i>=0;i--) {
printf("%d",res.d[i]);
}
return 0;
}