http://acm.hdu.edu.cn/showproblem.php?pid=1282
如果用字符串的话,就是这样:
#include <iostream>
#include<string>
using namespace std;
string rev(string n)
{
int nlen=n.length();
string b(n);
for(int i=0;i<nlen;++i)
b[i]=n[nlen-1-i];
return b;
}
string add(string s1,string s2)
{
int j,l,la,lb;
string max,min;
max=s1;min=s2;
if(s1.length()<s2.length()) {max=s2;min=s1;}
la=max.size();lb=min.size();
l=la-1;
for(j=lb-1;j>=0;j--,l--) max[l] += min[j]-'0';
for(j=la-1;j>=1;j--) if(max[j]>'9'){max[j]-=10;max[j-1]++;}
if(max[0]>'9') {max[0]-=10;max='1'+max;}
return max;
}
int main(){
string n,num;
while(cin>>n)
{
int cont=0;
num=n; //保存
while(n!=rev(n)){
cont++;
n=add(n,rev(n));
}
cout<<cont<<endl;
n=num;
while(1){
cout<<n;
if(n!=rev(n))
cout<<"--->";
else break;
cont++;
n=add(n,rev(n));
}
cout<<endl;
}
return 0;
}
但这道题明确指出,不是大数,<2^31;用int就可以,足够了~~
#include<iostream>
using namespace std;
int inv(int n)
{
int a=0,b=1,c=1;
for(; b<=(n/10); b*=10);
for(; b>0; b/=10,c*=10)
a+=(n%(b*10)/b)*c;
return a;
}
int main()
{
int n,v;
while(cin>>n)
{
int count,s=n;
for (count=0; ; ++count)
{
v=inv(n);
if(v==n)break;
n+=v;
}
cout<<count<<endl;;
for(;;)
{
v=inv(s);
cout<<s;
if (v == s) break;
else s += v;
cout<<"--->";
}
cout<<endl;
}
return 0;
}