目录
一【题目描述】
二【题目样例】
三【解题思路】
- 最开始做只得了13分,测试点1,测试点6错误;测试1是本身里头有个小毛病,测试6是因为没有考虑到他是个不超过1000位的数字,long long也没办法囊括,实际是考虑大数运算
- 参考了这两篇文章进行学习1079 延迟的回文数 (20分)【附加测试点分析】_日常打铁憨批王小板的博客-CSDN博客(大数)大整数加法 C++ 示例代码_大整数加法运算c++代码_盼盼法式小面包0的博客-CSDN博客
本题注意:
1.学习字符串进行大整数运算的方法2.题中要求10次 用while(k--)就可以解决 不必太麻烦
四【代码实现】
#include<iostream>
#include<cstdio>
#include<string>
#include<string.h>
#include<algorithm>
using namespace std;
bool ishuiwen(string str) {//判断是不是回文数
string sstr=str;
reverse(sstr.begin(),sstr.end());
if(sstr==str) return true;
return false;
}
string sadd(string a,string b){//大数的运算
int lena=a.size();
int lenb=b.size();
string c="";
int len=0;
//长度短的在前面补0
if(lena>lenb){
b.insert(b.begin(),lena-lenb,'0');
}
if(lenb>lena){
a.insert(a.begin(),lenb-lena,'0');
}
int carry=0;//进位
for(int i=lena-1;i>=0;i--){
int temp=carry+(a[i]-'0')+(b[i]-'0');
carry=0; //进位置0
c.insert(c.begin(),(temp%10+'0'));
carry=temp/10;
}
if(carry!=0) c.insert(c.begin(),carry+'0');
return c;
}
int main(){
string s;
string sa,sb,sc;
cin>>s;
if(ishuiwen(s)) {
cout<<s<<" is a palindromic number.";
return 0;
}
int k=10;
while(k--){
sa=s;
reverse(s.begin(),s.end());
sb=s;
sc=sadd(sa,sb);
cout<<sa<<" + "<<sb<<" = "<<sc<<endl;
if(ishuiwen(sc)){
cout<<sc<<" is a palindromic number.";
return 0;
}
else s=sc;
}
cout<<"Not found in 10 iterations.";
}