2022年5月20日 星期五

[9] Palindrome Number

看一個數字是不是回文!且不要用轉成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);
}



沒有留言:

張貼留言