博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
<每日 1 OJ> -LeetCode 7. 整数反转
阅读量:5294 次
发布时间:2019-06-14

本文共 3765 字,大约阅读时间需要 12 分钟。

题目描述

 

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

示例 1:

输入: 123输出: 321

 示例 2:

输入: -123输出: -321

示例 3:

输入: 120输出: 21

解题思路

利用 / 和 % 进行运算。比如 123 -> 321 

123/10=12

123%10=3

设temp=0;

x=123;

第一次循环:

temp=temp*10+x%10

       =3

x=x/10

  =12

第二次循环:

temp =3*10+2

         =32

x=1

第三次循环:

temp=321

x=1/10=0;

c语言中1%10=1怎么理解?%在C语言中是一个取余数的符号在本题中1%10就是1/10后取余数,而1不够除以10,所以取商等于0,根据余数=被除数-除数*商=1-10*0=1,即得余数为一所以输出1

 所以当x=0时 ,输出temp 即为翻转数。

代码

1 #include "stdafx.h" 2 #include "stdlib.h" 3  4 int _tmain(int argc, _TCHAR* argv[]) 5 { 6     int reverse(int x); 7     int num ,reverseNum; 8     scanf("%d",&num); 9     reverseNum=reverse(num);10     printf("%d", reverseNum);11     system("pause");12     return 0;13 }14 15 int reverse(int x)16 {17   int temp=0;18   while(x%10!=0||x/10!=0)19   {20    if(temp<-214748364||temp>214748364)21    {22        return 0;23 24    }25    temp=temp*10+x%10;26    x=x/10; 27   }28   return temp;29 }

 

补充1:溢出问题:

对于正数,反码,补码与原码相同。

对于负数,补码是原码的符号位不变,数值部分按位取反再加1。
short型数据是16位表示最高位是符号位,所以只有15位表示数值,15位000000000000000-111111111111111表示的范围是0-32767,又加上最高位的符号位(第16位),就可以表示-32768-32767 。unsigned short型数据是16位都用来表示数值,16位0000000000000000-1111111111111111表示的范围是0-65535。
计算机在进行计算时是用补数计算的,且如果溢出会进行丢位处理。如short型32767补码是0111111111111111 加1后为1000000000000000(注意最高位是符号位),1000000000000000正是-32768的补数。
而unsigned short型数据无符号65535为1111111111111111(16位),加1后为10000000000000000(17位)这时计算机判断溢出后丢弃第17位,变为0000000000000000就是0了

 

补充2:溢出和取值范围

 

《C和指针》中写过:long与int:标准只规定long不小于int的长度,int不小于short的长度。

double与int类型的存储机制不同,long int的8个字节全部都是数据位,而double是以尾数,底数,指数的形式表示的,类似科学计数法,因此double比int能表示的数据范围更广。

long long在win32中是确实存在,长度为8个字节;定义为LONG64。 

为什么会出现long int呢?在win32现在系统中,长度为4;在历史上,或者其他某些系统中,int长度为2,是short int。 
即便是long long,在TI的有款平台中,长度为5也就是说,每种类型长度,需要sizeof才知道,如果可能,最好用union看看里面的数据,可以消除一些类型的假象长度。

类型名称        字节数    取值范围signed char       1        -128~+127 short int 2 -32768~+32767 int 4 -2147483648~+2147483647 long int 4 -2147483648~+2141483647 long long long int 8 -9223372036854775808~+9223372036854775807
unsigned int  (unsigned long)4字节8位可表达位数:2^32=42 9496 7296 范围:0 ~ 42 9496 7295 (42*10^8) int (long) 4字节8位可表达位数:2^32=42 9496 7296 范围:-21 4748 3648 ~ 21 4748 3647 (21*10^8) long long (__int64) 8字节8位可表达位数:2^64=1844 6744 0737 0960 0000 范围:-922 3372 0368 5477 5808 ~ 922 3372 0368 5477 5807 (922*10^16) unsigned long (unsigned __int64) 8字节8位可表达位数:2^64=1844 6744 0737 0960 0000 范围:0 ~ 1844 6744 0737 0955 1615 (1844*10^16)

最大值、最小值

在#include
存有各个类型的最大值和最小值CHAR_MIN       char的最小值SCHAR_MAX      signed char 最大值SCHAR_MIN       signed char 最小值 UCHAR_MAX      unsigned char 最大值 SHRT_MAX       short 最大值 SHRT_MIN       short 最小值 USHRT_MAX      unsigned short 最大值 INT_MAX       int 最大值 INT_MIN        int 最小值 UINT_MAX       unsigned int 最大值 UINT_MIN       unsigned int 最小值 LONG_MAX      long最大值 LONG_MIN       long最小值 ULONG_MAX      unsigned long 最大值 FLT_MANT_DIG    float 类型的尾数 FLT_DIG        float 类型的最少有效数字位数 FLT_MIN_10_EXP   带有全部有效数的float类型的负指数的最小值(以10为底) FLT_MAX_10_EXP    float类型的正指数的最大值(以10为底) FLT_MIN        保留全部精度的float类型正数最小值 FLT_MAX        float类型正数最大值

 

自己推算:

以int类型为例: 

int为4字节32位,其中首位用0表示正数,用1表示为负数。因此对于 
最大正数可以表示为:0x7fff ffff(7的二进制为0111,f二进制为1111) 
最大负数(-1)可以表示为:0xffff ffff 
最小负数可以表示为:0x8000 0000(8的二进制为1000)

补充3:

INT_MIN在标准头文件limits.h中定义。

1 #define INT_MAX 21474836472 #define INT_MIN (-INT_MAX - 1)//这里没有简单地将INT_MIN赋值成-2147483647,是因为-2147483648对于编译器而言是个表达式,而2147483648对于32-bit整数是无法表示的, 所以经过这个表达式的结果是未定义的。在GCC上直接写-2147483648后,编译器给出了警告,说结果是unsigned。

在C/C++语言中,不能够直接使用-2147483648来代替最小负数,因为这不是一个数字,而是一个表达式。表达式的意思是对整数21473648取负,但是2147483648已经溢出了int的上限,所以定义为(-INT_MAX -1)。

C中int类型是32位的,范围是-2147483648到2147483647 。 

(1)最轻微的上溢是INT_MAX + 1 :结果是 INT_MIN; 
(2)最严重的上溢是INT_MAX + INT_MAX :结果是-2; 
(3)最轻微的下溢是INT_MIN - 1:结果是是INT_MAX; 
(4)最严重的下溢是INT_MIN + INT_MIN:结果是0 。

 

 

转载于:https://www.cnblogs.com/mhq-martin/p/11356254.html

你可能感兴趣的文章
【转】iOS开发UI篇—iPad和iPhone开发的比较
查看>>
【转】Android底层库和程序
查看>>
Comparación para 2019 Nueva Lonsdor K518S y K518ISE
查看>>
论文笔记——MobileNets(Efficient Convolutional Neural Networks for Mobile Vision Applications)
查看>>
从今天开始
查看>>
Attribute(特性)与AOP
查看>>
第三次作业
查看>>
Codeforces 962 /2错误 相间位置排列 堆模拟 X轴距离最小值 前向星点双连通分量求只存在在一个简单环中的边...
查看>>
Matrix快速幂 模板
查看>>
MySQL开启远程连接权限
查看>>
tomcat7.0.27的bio,nio.apr高级运行模式
查看>>
C#预处理器命令
查看>>
苹果手表:大方向和谷歌一样,硬件分道扬镳
查看>>
Competing Consumers Pattern (竞争消费者模式)
查看>>
HDUOJ ------1398
查看>>
cf--------(div1)1A. Theatre Square
查看>>
Android面试收集录15 Android Bitmap压缩策略
查看>>
PHP魔术方法之__call与__callStatic方法
查看>>
ubuntu 安装后的配置
查看>>
Html学习_简易个人网页制作
查看>>