这一题几个注意的地方:
1,n的最大长度为10的10次方,k最大为100,这是一个非常大的数,必须要字符串,而且字符串的空间要足够,我留了100位
2,如果输入本身是一个是一个Palindromic number,输出这个数并且step为0
3,之前用的char*最为字符串,在vs2010里跑正确,但是用g++编译运行就会出错,估计是对char*的理解不够,这里之后再找出具体原因
#include <iostream>
#include <string>using namespace std;bool isPalindromic(string str)
{int len=str.length();for(int i=0;i<=(len-1)/2;i++){if(str[i]!=str[len-1-i])return false;}return true;
}string addReverse(string str)
{string res="",rev=str;int len = str.length(),tempRes[100]={0},carry=0;for(int i=0;i<len;i++){int a=str[i]-'0',b=str[len-i-1]-'0';int c=a+b+carry;if(c>9){tempRes[i]=c%10;carry=c/10;}else{tempRes[i]=c;carry=0;}}if(carry>0)tempRes[len++]=carry;char str_res[100];for(int i=len-1;i>=0;i--){str_res[len-i-1]=tempRes[i]+'0';}str_res[len]='\0';res=string(str_res);return res;
}int main()
{string n;int k,steps=1;cin>>n>>k;if(isPalindromic(n)){cout<<n<<endl<<0<<endl;return 0;}string a = addReverse(n);while(steps<k){if(isPalindromic(a))break;steps++;a=addReverse(a);}cout<<a<<endl<<steps<<endl;return 0;
}
下面也将用char*的代码贴出来,以后再看:
#include <iostream>
#include <string.h>using namespace std;bool isPalindromic(char a[])
{int len=strlen(a);for(int i=0;i<=(len-1)/2;i++){if(a[i]!=a[len-1-i])return false;}return true;
}char* double_num(char a[])
{int str_temp[100];char str[100];int len = strlen(a);int carry=0,index=0;for(int i=len-1;i>=0;i--){int temp=a[i]-'0',temp2=a[len-i-1]-'0',digit=0;temp=temp+temp2+carry;if(temp>9){carry=temp/10;digit=temp%10;}else{digit=temp;carry=0;}str_temp[index++]=digit;}if(carry>0)str_temp[index++]=carry;int p=0;for(int i=index-1;i>=0;i--){str[p++]=(char)str_temp[i]+'0';}str[p]='\0';return str;
}int main()
{//freopen("F:/CppProject/data/1024.txt","r",stdin);int k;char n[100],n1[100];cin>>n>>k;int step=1,success=0;strcpy(n,double_num(n));if(isPalindromic(n)){cout<<n<<endl<<0<<endl;return 0;}while(!isPalindromic(n) && step<k){strcpy(n,double_num(n));//cout<<n<<endl;step++;}cout<<n<<endl;step=step>k?k:step;cout<<step<<endl;return 0;
}