pat a 1024 Palindromic Number

来源:互联网 发布:mac osx vmware tools 编辑:程序博客网 时间:2024/05/02 00:46

生词:palindromic [计]回文的,[医]复发的;

#include<cstdio>#include<cstring>struct bign{int len;int d[1000];bign(){len=0;memset(d,0,sizeof(d));}}; bign 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';}return a;}bign reverse(bign a){bign d;d.len=a.len;for(int i=0;i<a.len;i++){d.d[i]=a.d[a.len-1-i];}return d;}bign add(bign a,bign b){bign c;int carry=0,temp=0;//for(int i=0;i<a.len||b.len;i++){错误:i<a.len||b.len=1,因为b.len>0 for(int i=0;i<a.len||i<b.len;i++){temp=a.d[i]+b.d[i]+carry;c.d[c.len++]=temp%10;carry=temp/10;}if(carry!=0){c.d[c.len++]=carry;}return c;}bool judgePa(bign a){bign b;b=reverse(a);for(int i=0;i<a.len;i++){if(a.d[i]!=b.d[i]){return false;}}return true;}void printBign(bign a){for(int i=a.len-1;i>=0;i--){printf("%d",a.d[i]);}printf("\n");}void judge(bign a,int b){bign temp=a;//for(int i=1;i<=b;i++){错因:这里的i记录的是执行回文检查的次数,题目要求是执行变换的次数 for(int i=0;i<b;i++){//将原本的i<=b改为i<b,操作次数零次的不会执行,这个改动我很是看书才发现的,自己很没自信,需要再多编程培养感觉!!!!!!!! if(judgePa(temp)){printBign(temp);printf("%d",i);return;}else{temp=add(temp,reverse(temp)); }}printBign(temp);printf("%d",b); return;}int main(){char A[105]={};int B=0;scanf("%s %d",A,&B);bign a=change(A);judge(a,B);return 0; }


原创粉丝点击