题目描述

给定一个 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 即为翻转数。

代码

 #include "stdafx.h"
#include "stdlib.h" int _tmain(int argc, _TCHAR* argv[])
{
int reverse(int x);
int num ,reverseNum;
scanf("%d",&num);
reverseNum=reverse(num);
printf("%d", reverseNum);
system("pause");
return ;
} int reverse(int x)
{
int temp=;
while(x%!=||x/!=)
{
if(temp<-||temp>)
{
return ; }
temp=temp*+x%;
x=x/;
}
return temp;
}

补充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<climits>存有各个类型的最大值和最小值
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 2147483647
2 #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 。


最新文章

  1. Hive读取外表数据时跳过文件行首和行尾
  2. CoreGraphics QuartzCore CGContextTranslateCTM 用法
  3. 全网最详系列之-倍增求LCA
  4. throw和throw ex的区别
  5. Android 并行自动化测试系统 实现总结
  6. Qt使用默认浏览器打开网页
  7. 【转】GCC编译使用动态链接库
  8. AIX LVM 常用命令记录
  9. NAND flash NOR flash SDRAM区别
  10. leetcode第一刷_Count and Say
  11. python脚本工具-2 去除扩展名后提取目录下所有文件名并保存
  12. 创建以及加载模块【nodejs第四篇】
  13. 校门外的树 OpenJudge 1.6.06
  14. 基于MVC设计模式的Web应用框架:struts2的简单搭建(一)
  15. 同时安装python2和python3
  16. idea 找不到classpath 为resource下的xml
  17. java 模拟浏览器爬虫
  18. 深入理解java虚拟机(二)-----垃圾回收
  19. 使用solr进行配置文件
  20. Unity3D协同函数与异步加载功能实战 学习

热门文章

  1. 使用GitHub搜索技巧
  2. 物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus
  3. Matlab解释器模式
  4. android studio学习----调试---断点调试
  5. android中实现service动态更新UI界面
  6. Linux 环境变量配置(Nodejs/MongoDB/JDK/Nginx)
  7. TCP 协议简介-阮一峰(转载)
  8. FFMPEG 命令行工具-ffprobe
  9. 动态路由 RIP
  10. Apache/Nginx的web网页访问加密