大数加法,数字太大会超过long long的表示范围,所以用字符串处理,注意进位。
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <string.h>
using namespace std;
int maxx = 120;
void adc(char *a,char *b)//大数加法,注意进位的处理
{
int len = strlen(a);
int pos = maxx-1;
int tmp,c=0;
char ret[maxx] = {0};
for(int i = len-1;i>=0;i--)
{
tmp = (a[i]-'0')+(b[i]-'0')+c;
c = tmp/10;
tmp %=10;
ret[--pos]=tmp+'0';
}
if(c!=0)
ret[--pos]=c+'0';
strcpy(a,ret+pos);
}
int isp(char *s)
{
int len = strlen(s);
char st[maxx] = {0};
for(int i=0;i<len;i++)
st[len-1-i]=s[i];
if(strcmp(s,st)==0)
return 1;
else
{
adc(s,st);
return 0;
}
}
int main()
{
int n,i;
char s[maxx];
scanf("%s %d",s,&n);
for(i=0;i<n;i++)
{
if(isp(s))
{
printf("%s\n%d\n",s,i);
return 0;
}
}
printf("%s\n%d\n",s,n);
return 0;
}