这一题几个注意的地方:
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;
}