#include<bits/stdc++.h>
using namespace std;
bool ishvwf(string a){
//long long b =stoi(a);
for(int i=0;i<a.size();i++){
if(a[i]!=a[a.size()-1-i]){
return false;
}
}
return true;
}
string add(string a,string b){
int carry=0,cnt=0;
char c[1009]={'0'};//1这里一开始大小不够 2清空字符串
for(int i=0;i<a.size()||i<b.size();i++){
int temp=a[a.size()-1-i]-'0'+b[b.size()-1-i]-'0'+carry;//字符转化为数直接-'0'即可 每一个都要减
c[cnt++]=temp%10+'0' ;//变成字符
carry=temp/10;
}
if(carry!=0){
c[cnt++]=1+'0';//大整数相加处理最后一位大整数相减除去多余0 注意要变回字符
//printf("***%d***",cnt);
}
string q=c;
//debug
//printf("******%s*****",q.c_str());
reverse(q.begin(),q.end());
return q;
}
int main(){
string a;
cin>>a;
if(ishvwf(a)){
printf("%s is a palindromic number.",a.c_str());
}
else{
int flag=1;
for(int i=0;i<10;i++){
//long long _1,_2;
//_1=stoi(a);
string p=a;
reverse(a.begin(),a.end());//无返回值函数
//_2=stoi(a);
//long long c=_1+_2;
string d=add(p,a);
//printf("%lld + %lld = %lld\n",_1,_2,c);
printf("%s + %s = %s\n",p.c_str(),a.c_str(),d.c_str());
//a=to_string(c);
a=d;
if(ishvwf(d)){
printf("%s is a palindromic number.",d.c_str());
flag=0;
break;
}
}
if(flag==1){
printf("Not found in 10 iterations.");
}
}
return 0;
}
总结
1.大整数相加1000位,一开始没注意直接转,只错了一个2分的点,看来性价比还是很高的
2.大整数相加时不要忘记处理最后一位进位,相减,相除要去0用while
3.char d【】数组转string 直接 string a=d就完了我的天哪,然后可以享受string 那些好用的库函数
4. main函数外定义的函数 里面的变量不能自己初始化,我一开始定义了一个char d【1009】按要求已经够了,但出现了不可名状的错误,我将数组扩大可以解决,后来将他赋值初始化也可以解决,所以要记得初始化,针对字符串即使是赋值操作
英语
问题 大整数运算要再总结 写