pat-1024 Palindromic Number

如果不是回文则进行逆序相加操作,打印出最后回文和操作次数

题目中说数字可达到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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值