杭电ACN 1282 回文数猜想

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值