题目:https://www.patest.cn/contests/pat-a-PRactise/1023
参考代码:
#include<stdio.h>#include<string.h>struct bign{ int d[21]; int len; bign(){ memset(d,0,sizeof(d)); len=0; }};bign change(char str[]){ bign a; a.len=strlen(str); for(int i=0;i<a.len;i++){ a.d[i]=str[a.len-i-1]-'0'; } return a;}bign mul(bign a,int b){ bign c; int carry=0; for(int i=0;i<a.len;i++){ int temp=a.d[i]*b+carry; c.d[c.len++]=temp%10; carry=temp/10; } while(carry!=0){ c.d[c.len++]=carry%10; carry/=10; } return c;}bool Judge(bign a,bign b){ if(a.len!=b.len) return false; int count[10]={0}; for(int i=0;i<a.len;i++){ count[a.d[i]]++; } for(int i=0;i<a.len;i++){ count[b.d[i]]--; } for(int i=0;i<10;i++){ if(count[i]!=0) return false; } return true;} void print(bign a){ for(int i=a.len-1;i>=0;i--){ printf("%d",a.d[i]); }}int main(){ char str[21]; scanf("%s",str); bign a=change(str); bign b=mul(a,2); if(Judge(a,b)) printf("Yes/n"); else printf("No/n"); print(b);}个人代码(有瑕疵):#include<cstdio> #include<cstring> #include<cstdlib> #include<cmath>#include<algorithm> using namespace std; int main() { int a[21],b[21],t=0,pos=0,c[10]={0},flag=1; char s[21]; gets(s); int len=strlen(s); for(int i=0;i<len;i++){ a[i]=s[len-i-1]-'0'; } for(int i=0;i<len;i++){ int temp=a[i]*2+t; t=temp/10; b[pos++]=temp%10; } if(pos!=len) flag=0; for(int i=0;i<len;i++){ c[a[i]]++; c[b[i]]--; } for(int i=0;i<10;i++){ if(c[i]!=0) flag=0; } if(flag==1){ printf("Yes/n"); for(int i=len-1;i>=0;i--){ printf("%d",b[i]); } }else{ printf("No/n"); for(int i=len-1;i>=0;i--){ printf("%d",b[i]); } } system("pause"); }
新闻热点
疑难解答