9. Palindrome Number

来源:互联网 发布:unity3d 嵌入网页 编辑:程序博客网 时间:2024/06/05 18:44

题目:

9. Palindrome Number

Determine whether an integer is a palindrome. Do this without extra space.

bool isPalindrome(int x) {。。。}


思路:

(1)获取整数的位数length

(2)得到10的(length/2)次幂,如100,1000......作为除数m;

(3)x/m为商,x%m为余数

(4)x位奇数,则商去除最后一位

(5)去除商后面的所有0,

(6)把余数进行逆转,

(7)比较商和余数的值,相等为true,否则为false


注意:

刚开始把负数也考虑进去了,如-123321也当作了回文,负数不是回文数。


(1)刚开始把负数考虑进回文数的情况

bool isPalindrome(int x) {    int t;    int odd_even_number;//even number is 0,odd is 1    int length=0;        int divide=1;    int pre,post;    int remove_zero;    int reveser_post=0;    if(x<0)    {        return false;    }    else if(x<10 &&x>=0)    {        return true;    }        t=x;    while(t/10 !=0)    {        length++;        t=t/10;    }        length++;//得到整数的位数    //printf("The length is %d\n",length);        odd_even_number=(length%2==0)?0:1;        int half=length/2;    while(half>0)    {        divide=divide*10;        half--;    }            pre=x/divide;    post=x%divide;        //printf("divide %d, pre %d,post %d\n",divide,pre,post);        if(odd_even_number==1)//odd nubmer    {        pre=pre/10;//奇数,去掉中间项    }        //商去掉后面的0    remove_zero=pre%10;    while(remove_zero==0)    {        pre=pre/10;        remove_zero=pre%10;    }    //printf("divide %d, pre %d,post %d\n",divide,pre,post);        //reverse post number    while(post>0)    {        int left=post%10;                reveser_post=reveser_post*10+left;        post=post/10;    }    printf("divide %d, pre %d,reveser_post %d\n",divide,pre,reveser_post);        if(pre==reveser_post)    {        return true;    }    else    {        return false;    }    }


(2)负数不考虑进回文的情况,正确解答:

bool isPalindrome(int x) {    int t;    int odd_even_number;//even number is 0,odd is 1    int length=0;        int divide=1;    int pre,post;    int remove_zero;    int reveser_post=0;    if(x<0)    {        return false;    }    else if(x<10 &&x>=0)    {        return true;    }        t=x;    while(t/10 !=0)    {        length++;        t=t/10;    }        length++;//得到整数的位数    //printf("The length is %d\n",length);        odd_even_number=(length%2==0)?0:1;        int half=length/2;    while(half>0)    {        divide=divide*10;        half--;    }            pre=x/divide;    post=x%divide;        //printf("divide %d, pre %d,post %d\n",divide,pre,post);        if(odd_even_number==1)//odd nubmer    {        pre=pre/10;//奇数,去掉中间项    }        //商去掉后面的0    remove_zero=pre%10;    while(remove_zero==0)    {        pre=pre/10;        remove_zero=pre%10;    }    //printf("divide %d, pre %d,post %d\n",divide,pre,post);        //reverse post number    while(post>0)    {        int left=post%10;                reveser_post=reveser_post*10+left;        post=post/10;    }    printf("divide %d, pre %d,reveser_post %d\n",divide,pre,reveser_post);        if(pre==reveser_post)    {        return true;    }    else    {        return false;    }    }






0 0
原创粉丝点击