天天看點

1282:回文數猜想

題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=1282

方法:棧,字元串與數字的轉換

思路:這道題我真是折騰服氣了,還是學藝不精啊,沒什麼腦子,隻能是硬上啊。總體思路就是先用字元串的棧方法判斷是否回文,而後通過字元串轉整型和整型轉字元串來搞,還傻了吧唧的寫了一個逆序輸出的函數,後來發現整型轉字元串自動就是逆序,不用再外加方法了,總之這個題做的十分混亂,要不第一遍就AC了估計早就瘋了。

難點:字元串的操作

#include <iostream>
#include <cstdio>
#include <string.h>
#include <stack>
using namespace std;
char numStr[1000];
int res[1000];

int strToNum(char str[])
{
    int num = 0;
    int len = strlen(str);
    for(int i = 0;i <= len-1;i++)
        num = (str[i]-'0')+num*10;
    return num;
}

int reversenum(int num)
{
    int newNum = 0;
    while(num != 0)
    {
        newNum = num%10+newNum*10;
        num /= 10;
    }
    return newNum;
}

void numToStr(int num)
{
    int i = 0;
    memset(numStr,0,sizeof(numStr));
    while(num!=0)
    {
        numStr[i] = '0'+num%10;
        num /= 10;
        i++;
    }
    return;
}

bool checknum(char *str)
{
    stack <char> s;
    bool flag = false;
    int len = strlen(str);
    for(int i = 0;i < len;i++)
        s.push(str[i]);
    for(int i = 0;i < len;i++)
    {
        if(str[i] == s.top())
        {
            flag = true;
            s.pop();
        }
        else
        {
            flag = false;
            break;
        }
    }
    return flag;
}

int main()
{
    while(~scanf("%s",&numStr))
    {
        int time = 0;
        int ans = strToNum(numStr);
        res[0] = ans;
        while(!checknum(numStr))
        {
            numToStr(ans);
            int num = strToNum(numStr);
            ans += num;
            numToStr(ans);
            time++;
            res[time] = ans;
        }
        cout<<time<<endl;
        for(int i = 0;i <= time;i++)
        {
            if(i!=time)
                cout<<res[i]<<"--->";
            else
                cout<<res[i]<<endl;
        }
    }
}