題目連結: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;
}
}
}