Leetcode7:整数反转【c语言实现】

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

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

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

记一下自己的思路

  • 首先是拿到这个题,我就直接考虑怎么进行反转了。
  • 想到了 % 与 / 运算 然后大刀阔斧就开干了
  • 后面写了个for循环实现了,差不多就这个样子
for (int j = 0; j < i; ++j) {
	 // i是输入数的位数 
     temp = var_abs % (int)(pow(10, j + 1)) / (pow(10, j));
     a = a + temp *pow(10,i-j-1);
     }
  • 输入了个321输出123,然后就憨憨的去提交代码,啪啪打脸。执行出错,结果出错。
  • 原来是忽视了一个很重要的题目条件,那就是溢出。所给的环境不允许整型溢出。
  • 哎,全是辛酸泪。第一次是绝对值转化溢出,即是-2^32 ,abs()函数取绝对值后溢出。因为int型的范围是[-2^32, 2^32-1]。绝对值转化直接溢出。GG
  • 对于这个一个特列,绝对值后溢出,直接if打回冷宫。
  • 然后后面又是在组装的时候溢出,后面想到溢出即是正数变为负数,那我就不让你为负。判断一哈,就有了这样的代码。hhh,好沙雕的代码。
  • 后来提交就成功了,emmm,之前还有好多问题,哎,调试全靠printf。不删我的调试printf了,,随意嘲笑叭。菜就完事了。
  for (int j = 0; j < i; ++j) {
	 // i是输入数的位数 
     temp = var_abs % (int)(pow(10, j + 1)) / (pow(10, j));
     c = temp *pow(10,i-j-1);
     a = a + c;
     if ((2147483647-a)>=c&&a>=0&&c>=0) {
                a = a + c ;
            } else
                return 0;
     }

C :reverse-integer

//
// Created by fitz on 2019/8/3.
//
#include <stdio.h>
#include <math.h>

int reverse(int x){
    int i = 0;
    int br = 0;
    int var_abs;
    int p = x;
    int a=0;
    int temp = 0;
    while (p!=0){
        p = p/10;
        i++;
    }
    //2^31-1=2147483647,-2^31=-2147483648
    if (x>2147483647||x<=-2147483648){
        return 0;
    }
    if (x==0){
        return 0;
    }else{
        if (x>0) br=1;
        // printf("%d\n",x);
        var_abs = abs(x);
        // printf("var_abs=%d\n",var_abs);
        for (int j = 0; j < i; ++j) {
            temp = var_abs % (int)(pow(10, j + 1)) / (pow(10, j));
            // printf("temp=%d\n",temp);
            int c = temp *pow(10,i-j-1);
            // printf("a=%d\t c=%d\n",a,c);
            if ((2147483647-a)>=c&&a>=0&&c>=0) {
                a = a + c ;
            } else
                return 0;
            // printf("这是第%d次,此时temp=%d,a=%d\n",j,temp,a);
            }
        }
        if (br==1)
            return a;
        else
            return -a;
    }


int main(){
    int z = 1534236469;
    int result = reverse(z);
    printf("%d",result);
    return 0;
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值