作者tokyobabylon (paris)
看板C_and_CPP
標題[問題] 關於大數放到小數中...
時間Mon Jan 11 21:56:39 2010
目的是想要讓大的數放到小的數中時,顯示overflow
如果是在data type範圍內的,就可以正常顯示...
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
#include<assert.h>
/*
撰寫程式時,要注意data type的強制轉換。
*/
bool check(int bigInt);
int main(void)
{
//int a=123456789;
int a;
short b;
printf("input a number\n");
scanf("%d", &a);
assert(a<2147483647);
if(check(a)==true){
b=a;
printf("%d\n",b);
}
else
printf("overflow");
system("pause");
return 0;
}
bool check(int bigInt)
{
if(bigInt<=SHRT_MAX && bigInt >=SHRT_MIN)
{
return true;
}
else
return false;
}
其中有參考了
http://en.wikipedia.org/wiki/Limits.h
但現在問題在於...怎麼跑也不會跑到assert()
在使用者輸入時,若是輸入超過int的界限,就已經爆掉了
根本跑不下去...
不知道要怎麼設計成使用者輸入時就可以檢查界限範圍呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.52.56
推 VictorTom:這樣說吧, 32 bit的int能表達的最大值就是 2147483647 01/11 22:23
→ VictorTom:所以除了user輸入 2147483647 以外, 你的assert永遠都不 01/11 22:23
→ VictorTom:會被trigger....@_@" 01/11 22:23
→ VictorTom:相對的, 32 bit的int能表達的數值range就在那, 你用 %d 01/11 22:24
→ VictorTom:加scanf, 理論上能讀入放進變數a的永遠也不可能overflow 01/11 22:25
→ VictorTom:所以, 你要找一個值域比32 bit int大的儲存空間, 才能知 01/11 22:26
→ VictorTom:道會不會overflow(在爆掉前); int64或是string都是可以 01/11 22:27
→ VictorTom:利用的方式; 只是之後的處理你要自己評估要不要用大數@@ 01/11 22:27