看一個數字是不是回文!且不要用轉成string 來做~~~~
一開始有點卡住, 因為商數不知道怎麼取出來?! 數字的長度無法預知
於是想說把最後一個數(除以十的餘數)取出來存到新的值,
新的值每次乘以十再加上取出來的餘數, 最後和原始的數字相比就可以知道是不是回文的數字版了!
看起來很完美但不意外的又卡到了MAX INT XD
寫了一個很笨的判斷:
bool isPalindrome(int x){
if (x < 0)
return false;
int out=0, in = x;
int head = 0;
for(int i=0;i<10,x>0;i++)
{
if (i==9 && head >2 )
return false;
//printf("%d,%d,%d,%d\n",i,head,out,x);
out = out*10 + x%10;
if (out == x%10)
head = out;
x/=10;
}
return (out == in)? (true):(false);
}
然後發現討論區的都用 long 在偷吃步!可惡XD
long 可以完全省去判斷 MAX INT的麻煩, 但似乎是因為long 的關係需要較多的空間.
以空間換取時間的概念~~~
bool isPalindrome(int x){
if (x < 0)
return false;
long out=0;
int in = x;
while(x>0)
{
out = out*10 + x%10;
x/=10;
}
return (out == in);
}