反转整数

问题

给定一个 32 位有符号整数,将整数中的数字进行反转。

示例 1:

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

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

输入: 120
输出: 21

注意:

假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。

解决

Java解决方案
安照正常的思考,我们的代码如下:

   	public static int reverse(int x) {
		int temp = 0;
		while (x!= 0) {
          
			temp = temp *10 +x%10;
			x /= 10;
		}
		
		if (temp <Integer.MIN_VALUE/10||temp>Integer.MAX_VALUE/10) {
			return 0;
	   	}
		return temp;
	}

当输入1245678993 输出了-296201875 细心的人就会发现,此时栈溢出了;

原因是多乘了一次10,解决办法就是,先判断是否已经栈溢出,再进行乘以10

   	public static int reverse(int x) {
		int temp = 0;
		while (x!= 0) {
            if (temp <Integer.MIN_VALUE/10||temp>Integer.MAX_VALUE/10) {
			return 0;
	    	}
			temp = temp *10 +x%10;
			x /= 10;
		}
		return temp;
	}

C语言解决方案
和java一样,先判断是否越界,再进行反转操作,这里我们需要引入头文件"limits.h"

int reverse(int x) 
{
	int temp = 0;
	while (x != 0)
	{
		//正数是否越界
		if (temp > 0 && ((temp == INT_MAX / 10 && x % 10 > INT_MAX % 10) || temp > INT_MAX / 10))
			return 0;

		//负数是否越界
		if (temp < 0 && ((temp == INT_MIN / 10 && x % 10 < (unsigned)INT_MIN % 10) || temp < INT_MIN / 10))
			return 0;
		temp = temp * 10 + x % 10;
		x /= 10;
	}
	return temp;
}
全部评论

相关推荐

03-10 11:23
门头沟学院 Java
鹿LF:计算机面试就跟数学题一样,没什么实际价值,但只能这么筛选,本质是考察你的努力,智力和学习能力
点赞 评论 收藏
分享
Kurumis:整个简历看下来就发现你其实对测试理解还很浅,很多地方都是硬凑上去,项目也是学生课设级别,没什么含金量 首先是学习建议: 1.系统性了解一个真实工程的框架,有利于你后续提升项目含金量,理解测试的逻辑 2.真正去学一下自动化测试和性能测试 再就是简历本身包装问题: 1.投测试的话就不要说自己独立开发自己测,专注描述自己怎么做测试的 2.项目经历太像套话,很容易让人怀疑你到底真的做过没有,比如并发是具体做了多少并发?自动化脚本是怎么跑兼容性和性能测试的?测试用例写了多少条? 3.教务管理系统一听就是数据库课设作业,含金量不高,不过你可以在原项目基础上重构扩展,比如添加docker容器部署MySQL和Redis,添加消息队列和锁机制防止系统扛不住高并发访问,让它真的像个实际工程 4.技能里性能专项测试没有把握不要乱写,就写你会什么工具就行了,做专项性能测试的都是行业大佬,你要写的话一定要有对应的专项性能测试项目 5.可以在简历里附上项目链接,压缩简历内容的同时提升简历真实性
今天你投了哪些公司?
点赞 评论 收藏
分享
昨天 11:37
黑河学院 运营
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务