【题目】反转32位整数

该文章介绍了一个C++代码示例,用于反转一个32位有符号整数,包括正数、负数和零的情况。代码首先判断数字的符号,然后通过取模和除法操作存储每一位数字,最后组合成反转后的整数。同时,文章提出了增强鲁棒性的思考,如检查输入是否会导致溢出以及溢出时的处理策略。
摘要由CSDN通过智能技术生成

一、题目描述

输入一个32位有符号整数x,其中x可以小于0、等于0或大于0.输出x的反转,并符合阅读规范。
样例1:输入12345,输出54321.
样例2:输入0,输出0.
样例3:输入-123456,输出-654321.
样例4:输入12345000,输出54321.
样例5:输入-12345000,输出-54321.

二、解题思路

反转一个整数,就是把它每一位上的数存储,再反转。
若x小于0,则返回x绝对值反转后的相反数;若x=0,则反转后还是0.
主要考虑x大于0的情况。用一个长度为32的整型数组存储x每一位上的值,叫做digits[].
然后迭代地取出x每一位上的值(从个位开始),并顺序存入digits中。
其实现在只要输出digits每一个元素的值,就已经基本满足要求了。但考虑到我们这个函数的返回值为整型,所以还是计算一个整型值出来返回。
注意要扫描digits,将最前面的0忽略,这样比较符合我们的阅读习惯,即12345000反转后应为54321,而不是00054321.具体实现过程见下面的代码。

三、C++代码示例

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

class Solution
{
public:
	int reverse(int x)
	{
		if(x < 0)
		{
			return -reverse(abs(x));
		}
		else if(x == 0)
		{
			return 0;
		}
		else
		{
			int i = 0;
			int ans = 0;
			int digits[32];
			while(x > 0)
			{
				digits[i ++] = x % 10;
				x /= 10;
			}
			for(int j = 0;j < i;j ++)
			{
				while(digits[j] == 0)
				{
					continue;
				}
				ans += digits[j] * pow(10, i - j - 1);
			}
			return ans;
		}
	}
};

int main()
{
	Solution sol = Solution();
//	printf("%d", sol.reverse(12345));
//	printf("%d", sol.reverse(0));
//	printf("%d", sol.reverse(-12345));
//	printf("%d", sol.reverse(12345000));
	printf("%d", sol.reverse(-12345000));
	return 0;
}

四、其他问题

上述代码可以实现基本功能,即反转一个带符号的整数。思考如何增强鲁棒性,即判断输入是否溢出?若溢出如何处理?等等问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不是AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值