[LeetCode OJ]7. Reverse Integer

Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

 

个人的大体思路:

  先判断是整数还是负数,flag记录符号(-1或1),把数字取绝对值然后转换成字符串,字符串逆序,把字符串再转换成数字,再乘以flag添加符号.这样就解决了数字末尾是0,翻转过来0成为开头,还要想办法去掉开头0的问题.代码如下

 1 int reverse(int x) {
 2     char s[100],c[100];
 3     int flag = 1;
 4     //记录符号
 5     if (x < 0) {
 6         flag = -1;
 7     }
 8     //取绝对值
 9     x = abs(x);
10     //把数字转换成字符串
11     sprintf(s, "%d",x);
12     
13     int len = strlen(s);
14     int j = 0;
15     for (int l=len-1; l>=0; l--) {
16         //c字符串++遍历赋值,s字符串--遍历,则c字符串为s字符串的逆序
17         c[j] = s[l];
18         j++;
19     }
20     //将c字符串转为数字
21     sscanf(c, "%d",&x);
22     //给得到的数字加上符号
23     x *= flag;
24     
25     return x;
26 }

 

  结果...当然是Wrong Answer,还好的是有出错的测试数据给你.(详细如下图)

 

  看了测试输入和测试输出,就开始考虑为什么输入1534236469之后应该输出0.上网查了资料,int最大为2147483647,1534236469并没有超出int范围,而且题中也说了给一个integer数,不可能超出了int范围.那应该就是结果超出了int范围.而且一个int值逆序后,是有可能超过int范围的.按照测试数据来看,如果转换结果超过了int范围,输出结果应该为0.

  那么既然结果有可能超过int范围,那么,在逆序后的字符串变为数字的时候,就不能用int类型变量接收了,于是我把接收变量变为long型,并且判断,如果超过了int范围,则结果赋值0.代码如下:

 1 int reverse(int x) {
 2     char s[100],c[100];
 3     int flag = 1;
 4     if (x < 0) {
 5         flag = -1;
 6     }
 7     x = abs(x);
 8     sprintf(s, "%d",x);
 9     
10     int len = strlen(s);
11     int j = 0;
12     for (int l=len-1; l>=0; l--) {
13         c[j] = s[l];
14         j++;
15     }
16     
17     long res;
18     
19     sscanf(c, "%ld",&res);
20     
21     //判断是否超过了int范围
22     if (res > INT32_MAX || res < INT32_MIN) {
23         res = 0;
24     }
25     
26     res *= flag;
27     return res;
28 }

 

  运行结果就正确了.

  

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

 

转载于:https://www.cnblogs.com/wronganswer/p/6291522.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值