力扣每日一题7.5(整数反转)

自以为C学得入门了,刷力扣一下子原形毕露。
整数反转,自己写不出来的核心原因
(1)反转关键算法不清楚
(2)整形的具体范围模糊

(1)思路,需要两个变量,一个是待处理的值,一个用来存放当前的反转后的值。
如何让反转的值“升位”,这是一个问题。其实方法也很简单,count 进行累乘后再相加这一部分代表对原先count的值进行进位。
另外一个是while循环条件问题,直接x!=0 就好了,不需要每种情况都想一遍,很der!
(2)其实,在现在的C编译器中,int 和 long 取值范围一样(起初int占用内存是2字节,现在是4字节)
但不代表他俩就一样,stackoverflow回答里截取一个比较满意的。

A brilliant feature of gcc is that even when "int" and "long" have the same representation, that doesn't mean an "int*" can update a "long", or a "long*" can update an "int", even if the pointers are cast through void*. 

左半边2^31,
右半边2^31-1

int reverse(int x){
    long count=0;
    while(x!=0){
        count=count*10+x%10;
        x=x/10;
    }
    return count>2147483647||count<-2147483648?0:count;
}

```c
#define isOverLength 0

int reverse(int x){
    long lRet = 0;
    while(0 != x)
    {
        lRet = lRet * 10 + x % 10;
        x = x / 10;
    }

    if((int)lRet != lRet)
    {
        return isOverLength;
    }

    return (int)lRet;
}

最后附上我自己尝试实现功能的代码吧,有点der,哈哈哈!
留个思考的纪念

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

int main()
{
    long int a;   
	int count = 0; 
	int x = 3;
	
	scanf("%d",&a);
	
	if(a > 0)
	{
		x =1;
	}
	else if( a < 0)
	{
		x = 0;
	}
	a = abs(a);
	
	if(x == 0)
	{
		printf("-");
	}
    while(a != 1 && a != 0)
    {
    	count = a%10;
    	a /= 10;
    	if(count == 0)
    	{
    		continue;
		}
		else{
			printf("%d",count);
		}

	}
	printf("%d",a);
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值