g****p 发帖数: 94 | 1 写一个程序要求用户输入一个数字,存成int
如果int长度是32bit的话,怎么知道用户是不是输入了一个大于32bit范围的数字呢?
多谢! |
b******a 发帖数: 215 | 2 cast成double,判断是否大于2**31-1或者小于-2**31?
【在 g****p 的大作中提到】 : 写一个程序要求用户输入一个数字,存成int : 如果int长度是32bit的话,怎么知道用户是不是输入了一个大于32bit范围的数字呢? : 多谢!
|
g****p 发帖数: 94 | 3 那如果比那还大怎么办?
【在 b******a 的大作中提到】 : cast成double,判断是否大于2**31-1或者小于-2**31?
|
k****f 发帖数: 3794 | 4 那么大的数,自己数数位数不就知道了
【在 g****p 的大作中提到】 : 那如果比那还大怎么办?
|
g****p 发帖数: 94 | 5 不是我输入,控制不了啊
【在 k****f 的大作中提到】 : 那么大的数,自己数数位数不就知道了
|
b******a 发帖数: 215 | 6 如果不带指数输入的话, double的范围大约是+/–1.7E308(64bit),你想想能输入这
么多数字
吗?
int的话,如果不带指数输入的话,还有可以能超出范围,double的话基本上是不可能。
如果是带指数输入的话,检查指数的范围先。
【在 g****p 的大作中提到】 : 不是我输入,控制不了啊
|
k****f 发帖数: 3794 | 7 你控制不了?你不是可以读取么?按照字符读入?还是其他方式?
【在 g****p 的大作中提到】 : 不是我输入,控制不了啊
|
s****u 发帖数: 118 | 8 no non(ah-hoc) method as far as I know
【在 g****p 的大作中提到】 : 写一个程序要求用户输入一个数字,存成int : 如果int长度是32bit的话,怎么知道用户是不是输入了一个大于32bit范围的数字呢? : 多谢!
|
P********e 发帖数: 2610 | 9 input -> string
checking length ?
string -> int?
【在 g****p 的大作中提到】 : 写一个程序要求用户输入一个数字,存成int : 如果int长度是32bit的话,怎么知道用户是不是输入了一个大于32bit范围的数字呢? : 多谢!
|
b******a 发帖数: 215 | 10 2147483647和3147483647换成string,是不是一样的位数?
但是后面那个数已经超出32bit int的范围了.
【在 P********e 的大作中提到】 : input -> string : checking length ? : string -> int?
|
|
|
c****e 发帖数: 1453 | |
O******e 发帖数: 734 | 12 Then either use an eight-byte integer or reject the value and
request a new value or terminate program.
【在 g****p 的大作中提到】 : 那如果比那还大怎么办?
|
T********r 发帖数: 6210 | 13 write your own atoi, period. |
P********e 发帖数: 2610 | 14 ft
到这里,就自己定义,自己的函数了
后面当然不可以用系统的atoi,或者其他什么的
【在 b******a 的大作中提到】 : 2147483647和3147483647换成string,是不是一样的位数? : 但是后面那个数已经超出32bit int的范围了.
|
c********x 发帖数: 84 | 15 that is easy,
1. you convert the string to int,
2, you convert the int back to a string,
3, compare these two strings, if they are the same, then no overflow,
if they are not the same, then.... |