我的代码
还是柳神的简洁,草,继续努力
原始版
#include<iostream>
#include <algorithm>
#include<string>
#include <vector>
using namespace std;
vector<int> add(vector<int> &A,vector<int> &B){
if(A.size()<B.size()) return add(B,A);
int t=0;
vector<int> C;
for(int i=0;i<A.size();i++){
t+=A[i];
if(i<B.size()) t+=B[i];
C.push_back(t%10);
t/=10;
}
if(t) C.push_back(t);
return C;
}
bool panum(string x){
string t=x;
reverse(x.begin(),x.end());
if(t==x) return true;
else return false;
}
int main(){
string a,b,c;
cin>>b;
if(panum(b)){
printf("%s is a palindromic number.",b.c_str());
return 0;
}
a=b;
reverse(b.begin(),b.end());
vector<int> A,B;
for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
auto C=add(A,B);
for(int i=C.size()-1;i>=0;i--) c+=C[i]+'0';
cout<<a<<" + "<<b<<" = "<<c<<endl;
int num=0;
while(!panum(c)&&num<=8){
num++;
b=c;
a=b;
reverse(b.begin(),b.end());
vector<int> A,B;
for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
auto C=add(A,B);
c.clear();
for(int i=C.size()-1;i>=0;i--) c+=C[i]+'0';
cout<<a<<" + "<<b<<" = "<<c<<endl;
}
if(num<=8) printf("%s is a palindromic number.",c.c_str());
else cout<<"Not found in 10 iterations.";
return 0;
}
简化版
#include<iostream>
#include <algorithm>
#include<string>
#include <vector>
using namespace std;
vector<int> add(vector<int> &A,vector<int> &B){
if(A.size()<B.size()) return add(B,A);
int t=0;
vector<int> C;
for(int i=0;i<A.size();i++){
t+=A[i];
if(i<B.size()) t+=B[i];
C.push_back(t%10);
t/=10;
}
if(t) C.push_back(t);
return C;
}
bool panum(string x){
string t=x;
reverse(x.begin(),x.end());
if(t==x) return true;
else return false;
}
int main(){
int num=0;
string a,b,c;
cin>>c;
if(panum(c)){
printf("%s is a palindromic number.",c.c_str());
return 0;
}
while(!panum(c)&&num<10){
num++;
b=c,a=b;
reverse(b.begin(),b.end());
vector<int> A,B;
for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
auto C=add(A,B);
c.clear();
for(int i=C.size()-1;i>=0;i--) c+=C[i]+'0';
cout<<a<<" + "<<b<<" = "<<c<<endl;
}
if(num<10) printf("%s is a palindromic number.",c.c_str());
else cout<<"Not found in 10 iterations.";
return 0;
}
柳神代码
高精度加法要记住
#include <iostream>
#include <algorithm>
using namespace std;
string rev(string s) {
reverse(s.begin(), s.end());
return s;
}
string add(string s1, string s2) {
string s = s1;
int carry = 0;
for (int i = s1.size() - 1; i >= 0; i--) {
s[i] = (s1[i] - '0' + s2[i] - '0' + carry) % 10 + '0';
carry = (s1[i] - '0' + s2[i] - '0' + carry) / 10;
}
if (carry > 0) s = "1" + s;
return s;
}
int main() {
string s, sum;
int n = 10;
cin >> s;
if (s == rev(s)) {
cout << s << " is a palindromic number.\n";
return 0;
}
while (n--) {
sum = add(s, rev(s));
cout << s << " + " << rev(s) << " = " << sum << endl;
if (sum == rev(sum)) {
cout << sum << " is a palindromic number.\n";
return 0;
}
s = sum;
}
cout << "Not found in 10 iterations.\n";
return 0;
}