算法初步:数位反转

本文介绍了一种高效实现32位非负整数数位反转的方法,并提供了三种不同的代码实现方案进行对比,包括直接操作、使用数组辅助及转换为字符串再反转等策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:
编写一个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函数,还是有点收获,呵呵

转载于:https://www.cnblogs.com/tianyige/archive/2009/05/19/1459966.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值