|  | 
 
 发表于 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>
 | 
 |