现在的位置: 首页 > 综合 > 正文

杭电ACN 1282 回文数猜想

2013年09月05日 ⁄ 综合 ⁄ 共 1090字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.