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; }