如果不是回文则进行逆序相加操作,打印出最后回文和操作次数
题目中说数字可达到10的10次方 迭代可100次
则每次相加次数可能因进位多一位,longlong型只能19位可能不够
实现重点,字符串相加
注意求进位时也要带上carry
以下代码数值型会溢出
正确代码
题目中说数字可达到10的10次方 迭代可100次
则每次相加次数可能因进位多一位,longlong型只能19位可能不够
实现重点,字符串相加
注意求进位时也要带上carry
以下代码数值型会溢出
#include<iostream>
using namespace std;
long long reverse(long long in)
{
long long tmp = in;
long long re = 0;
while(tmp)
{
re *= 10;
re += tmp % 10;
tmp /= 10;
}
return re;
}
int main()
{
long long N;
int K;
int k = 0;
long long rN;
cin>>N;
cin>>K;
while(k < K)
{
rN = reverse(N);
if(rN == N)
break;
else
N += rN;
k++;
}
cout<<N<<endl;
cout<<k<<endl;
}
正确代码
#include<iostream>
using namespace std;
#include<string>
#include<algorithm>
string add(string s1,string s2)
{
int carry = 0;
string result = "";
int len1 = s1.size();
int len2 = s2.size();
int sum;
int i,j;
for(i = len1-1,j = len2-1;i>=0 || j>=0;i--,j--)
{
if(i<0)
sum = s2[j]-'0';
else if(j<0)
sum = s1[i]-'0';
else
sum = s1[i]-'0'+s2[j]-'0';
sum += carry;
result.insert(result.begin(),sum%10+'0');
carry = sum/10;
}
if(carry)
result.insert(result.begin(),carry+'0');
return result;
}
int main()
{
string str;
int K;
int k = 0;
string rstr;
cin>>str;
cin>>K;
while(k<K)
{
rstr = str;
reverse(str.begin(),str.end());
if(rstr == str)
break;
else
str = add(str,rstr);
k++;
}
cout<<str<<endl;
cout<<k<<endl;
}