PAT1136 A Delayed Palindrome 字符串相加+回文数

在这里插入图片描述
思路:
第一眼以为是个简单的字符串转数字相加就可以,但是数字最多可能有1000位,常规的long long 都无法存下,这里就需要转换成字符串处理相加
1.ispalindrome函数判断是否是一个回文字符串,是则返回true
2.getsum需要一个参数a,计算a加上a的反转数字,并返回结果
3.剩下的看注释即可,题目不难,但是要考虑的细节很多

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
bool ispalindrome(string a)
{
  string left=a.substr(0,a.size()/2);//左边部分
  string right;//右边部分
  if(a.size()%2==0)//能被2整除
  {
    right=a.substr(a.size()/2,a.size());
  }
  else
  {
    right=a.substr(a.size()/2+1,a.size());
  }
  reverse(right.begin(),right.end());
  if(left==right)return true;
  else return false;
}
string getreverse(string a)
{
  reverse(a.begin(),a.end());
  return a;
}
string getsum(string a)
{
  string str1=a,str2,str3;
  str2=getreverse(str1);
  int pre=0,sum;//进位值
  str3.resize(str1.size()+1);//假设运算结果比原来多一位
  for(int i=str1.size()-1;i>=0;i--)
  {
    char x=str1[i],y=str2[i];
    sum=pre+x-'0'+y-'0';
    str3[i+1]=sum%10+'0';
    if(sum>=10)
    {
      pre=1;
    }
    else pre=0;
  }
  if(pre>0)str3[0]=pre+'0';//最高位有进位
  else str3.erase(str3.begin());//没进位,删除第一个元素
  return str3;
}

int main()
{
  string a,b,c;
  cin>>a;
  int cnt=10;//剩余计算次数
  while(!ispalindrome(a)&&cnt--)
  {
    cout<<a<<" + "<<getreverse(a)<<" = "<<getsum(a)<<endl;
    a=getsum(a);
  }
  if(cnt>0)cout<<a<<" is a palindromic number."<<endl;
  else cout<<"Not found in 10 iterations."<<endl;
  return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值