hdu1282 回文数猜想 strrev颠倒代码

#include<iostream> 
#include<cstring> 
using namespace std; 
int main(void) 
{ 
    char snumber[1001],snumber1[1001],snumber2[1001],answer[1001][1001]; 
    int len1,flag,a,k,i,j; 
    while(cin>>snumber) 
    { 
        strcpy(snumber1,snumber); 
        strrev(snumber1);//将数字倒置 
        j=1; 
        strcpy(answer[0],snumber); 
        //大数相加,再加上点处理 
        while(strcmp(snumber,snumber1)) 
        { 
            k=1; 
            len1=strlen(snumber); 
            a=snumber[0]-'0'; 
            memset(snumber2,0,sizeof(snumber2)); 
            for(i=0;i<len1;i++) 
                snumber2[k++]=snumber[i]+snumber1[i]-'0'; 
             
            for(i=len1;i>=2;i--) 
            { 
                if(snumber2[i]>'9') 
                { 
                    snumber2[i]-=10; 
                    snumber2[i-1]++; 
                } 
            } 
            flag=0; 
            if(snumber2[1]>'9') 
            { 
                snumber2[1]-=10; 
                snumber2[0]='1'; 
                flag=1; 
            } 
            memset(snumber,0,sizeof(snumber)); 
            if(!flag) 
                for(i=0;i<len1;i++) 
                { 
                    snumber[i]=snumber2[i+1];     
                } 
            else 
                for(i=0;i<=len1;i++) 
                { 
                    snumber[i]=snumber2[i]; 
                } 
            strcpy(answer[j++],snumber); 
            strcpy(snumber1,snumber); 
            strrev(snumber1); 
        } 
        cout<<j-1<<endl; 
        for(i=0;i<j-1;i++) 
            cout<<answer[i]<<"--->"; 
        cout<<answer[j-1]; 
        cout<<endl; 
    } 
    return 0; 
} 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值