算法初步:数位反转

题目描述:
编写一个Reverse函数,声明类似unsigned Reverse(unsigned);
要求参数只有一个32bit非负整数,
同样返回一个32bit整数,但数位反转。

输入:
按参数传递,一个32bit非负数,且最高最低位不为0

输出:
按返回值输出

难度指数:☆

代码实现1:
unsigned Reverse(unsigned num)
{
    unsigned result = 0;
    while(num > 0)
    {
        result = result * 10 + num % 10;
        num = num/10;
    }
    return result;
}

点评:现在想想挺简单的,但一开始的时候,却没有直接这么做。

以下是两种笨的思路,留做纪念
代码实现2:
unsigned Reverse(unsigned num)
{
    unsigned *A = new unsigned[];
    unsigned result = 0;
    for(int i=0;num > 0;i ++)
    {
        A[i] = num % 10;
        num = num/10;
        result = result * 10 + A[i];
    }
    return result;
}

点评:多出了一个数组,无形中增加了内存,不爽

代码实现3:
unsigned Reverse(unsigned num)
{
    char *str = new char[];
    itoa(num,str,10);
    int n,j=0;
    n = strlen(str) + 1;
    char *temp = new char[n];
    for(int i=n-2;i >= 0;i --)
    {
        temp[j++] = str[i];
    }
    temp[n] = '\0';
    unsigned result = atoi(temp);
    return result;
}

点评:居然想到先转成字符串,再转回数字,真是很搞笑,但熟悉了一下itoa函数,还是有点收获,呵呵
posted @ 2009-05-19 10:12  Haven  阅读(288)  评论(0编辑  收藏  举报