|
发表于 2021-10-18 21:26:14
|
显示全部楼层
本帖最后由 jackz007 于 2021-10-18 21:27 编辑
- #include <stdio.h>
- bool notoverflow(long long d , char c)
- {
- long long max = 0x7fffffffffffffff , min = 0x8000000000000000 ;
- bool r = true ;
- if(d && ((d > 0 && max / d < c) || (d < 0 && min / d < c))) r = false ;
- return r ;
- }
- int main(void)
- {
- char ch ;
- long long d ;
- bool f ;
- for(d = 0 , f = true ; (ch = getchar()) != '\n' && ch >= '0' && ch <= '9' && f ;) {
- if(notoverflow(d , ch - '0')) {
- d = d * 10 + ch - '0' ;
- } else {
- fprintf(stderr , "数值溢出!\n") ;
- f = false ;
- }
- }
- if(f) printf("您键入的数值是:%I64d\n" , d) ;
- }
复制代码
编译、运行实况:
- D:\00.Excise\C>g++ -o x x.c
- D:\00.Excise\C>x
- 123456789012345678
- 您键入的数值是:123456789012345678
- D:\00.Excise\C>x
- 12345678901234567890123456
- 数值溢出!
- D:\00.Excise\C>
复制代码
|
|