您的位置:首页 > 其它

leetcode9 Palindrome Number

2015-09-09 20:01 330 查看
题意:给予一个整数,判断其是否为回文数,负数直接返回false.

二次AC,开始时以为负数也算是回文数,但是事实不是这样的.转换成了字符串,依次对比就ok了,代码里运用了itoa的源码.

代码

<span style="font-size:18px;">#include<stdio.h>
#include<iostream>
#include<string.h>
#include<string>
#include<cstdlib>
#include<algorithm>
#include<math.h>
using namespace std;

class Solution {
public:
	char* itoa(int num,char*str,int radix)
	{	
		/*索引表*/
		char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		unsigned unum;/*中间变量*/
		int i=0,j,k;
		/*确定unum的值*/
		if(radix==10&&num<0)/*十进制负数*/
		{
			unum=(unsigned)-num;
			str[i++]='-';
		}
		else 
			unum=(unsigned)num;/*其他情况*/
		/*转换*/
		do{
			str[i++]=index[unum%(unsigned)radix];
			unum/=radix;
		}while(unum);
		str[i]='\0';
		/*逆序*/
		if(str[0]=='-')
			k=1;/*十进制负数*/
		else
			k=0;
		char temp;
		for(j=k;j<=(i-1)/2;j++)
		{
			temp=str[j];
			str[j]=str[i-1+k-j];
			str[i-1+k-j]=temp;
		}
		return str;
	}

    bool isPalindrome(int x) {

    	int len;
    	int i;
    	char str[100];
    	memset(str,0,sizeof(str));

    	if(x<0)
    		return false;
    	
    	x = abs(x);

    	itoa(x,str,10);

    	len = strlen(str);

    	for(i=0;i<len/2;i++)
    	{
    		if(str[i] != str[len-i-1])
    			break;
    	}

    	if(i == len/2)
    		return true;
    	else
    		return false;
    }
};

int main()
{
	bool result;
	Solution test;
	int num;

	num = -2147447412;

	result = test.isPalindrome(num);
	cout<<result<<endl;

	return 0;
}</span>


另外一种就是从头开始计算一遍,就是计算字符串那样计算,之后判断是否与原整数相等,相等则是回文.

<span style="font-size:18px;">class Solution {
    public:
    bool isPalindrome(int x) {
    if (x < 0)
        return false;
    if(x == 0) return true;
    double result = 0;
    int temp = x;
    while(temp != 0)
    {
        result = result*10 + temp%10;
        temp /= 10;
    }
    return result == x;
   }
};</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: