每日一道算法题——整数反转(6.14)

博客介绍了如何反转32位有符号整数的每一位数字,提供了解题思路和完整代码。通过判断位数、处理首位为0的情况,并防止溢出来实现整数反转。示例包括正数、负数和首位为0的情况。
摘要由CSDN通过智能技术生成

题目:

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321
示例 2:

输入: -123
输出: -321
示例 3:

输入: 120
输出: 21

解答:

#define MIN -2147483648
#define MAX 2147483647


int reverse(int x){
    int i=0,j,t;
    long int tmp=x,sum=0;
    while(tmp){
        tmp=tmp/10;
        i++;
    }
    tmp=x;
    for(j=1;j<=i;j++)
    {
        t=tmp/(int)(pow(10,j-1))%10;
        if(t==0&&j==1)
            continue;
        sum+=t*(long int)(pow(10,i-j));
    }
    if(sum>=MIN && sum<=MAX)
        return sum;
    else
        return 0;
}

解题思路:
①首先得判断这个数到底有几位
用一个while语句

 while(tmp){
        tmp=tmp/10;
        i++;
    }

tmp每除一次10,i加1,循环结束i的值为这个数的位数。
②知道位数后,需要计算这个数每一位的值,以及反转后的值,还要注意是否存第一位为0情况。如果出现第一位为0,则终止本次循环(不终止整个循环)。

  for(j=1;j<=i;j++)
    {
        t=tmp/(int)(pow(10,j-1))%10;
        if(t==0&&j==1)
            continue;
        sum+=t*(long int)(pow(10,i-j));
    }

③判断数据是否溢出
注意long int的数据范围是:-2147483648~ 2147483647

 if(sum>=MIN && sum<=MAX)

完整代码可以这样写:

#include<stdio.h>
#include<math.h>

//long int数据范围-2147483648~ 2147483647
#define MIN -2147483648
#define MAX 2147483647

int reverse(int x){
    int i=0,j,t;
    long int tmp=x,sum=0;
  //判断这个数有几位,
    while(tmp){
        tmp=tmp/10;//每次除以10
        i++;//i每次加1
    }
    tmp=x;把原来的数赋值给tmp
    for(j=1;j<=i;j++)
    {
        t=tmp/(int)(pow(10,j-1))%10;//计算得到原始数每一位的值,通过取余数
        if(t==0&&j==1)//判断第一位是否为0,如果为0终止此次循环
            continue;
        sum+=t*(long int)(pow(10,i-j));//计算反转后的值
    }
    if(sum>=MIN && sum<=MAX)//判断数据是否溢出
        
        printf("%ld\n",sum);//打印反转后的数
    else
        return 0;
}


int main()
{
    int a;
    scanf("%d",&a);//输入原始数据
    reverse(a);
    return 0;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值