我是幫我朋友問的
她想問為什麼這個程式
用10位數以上的數字打進去會不正常?
謝謝各位囉!!
#include
int main()
{
int X,Y,Z,sum;
printf( "Enter first integer\\n");
scanf( "%d",&X);printf( "Enter second integer\\n");
scanf( "%d",&Y);
printf( "Enter third integer\\n");
scanf( "%d",&Z);
sum = X + Y+ Z ;
printf( "sum is %d \\n",sum);
return 0;
}
2006-09-15 13:26:46 · 6 個解答 · 發問者 Sua 2 in 電腦與網際網路 ➔ 程式設計
剛剛用Microsoft Visual C++ 6.0( "不好笑C" ^^ DX)跑過
程式:
#include
using std::cout;
using std::endl;
int main()
{
int n=2147480000;
cout<<"Test the max number for an interger\n";
while(n>0)
{
cout<<"now n is : "<< n <<".\n";
n++;
}
cout<<"we can found the max number\n";
return 0;
}
最大值為2147483647 ( 2^31-1 );最小值為-2147483648 (-2^31)
我想是作業系統32位元的關係,int為整數的意思,所以2^32個不同的代表符號中,正整數有2^31-1個,零佔一個,負整數有2^31個,就是它的設計
解決方案:
1.無解(no $$),不然限制條件,判斷SUM溢位時,輸出錯誤訊息好了
2.改64位元的主機板,CPU,作業系統,程式語言...(敗$$,不普遍)
有時程式改一改就能試出一些限制了
如果有錯務就用意見跟我說吧,大家都是從錯誤中學習和改正的
2006-09-15 20:48:08 補充:
PS: endl;在yahoo這不能用喔,不然程式內容會變過說
2006-09-15 16:39:08 · answer #1 · answered by 小林 1 · 0⤊ 0⤋
不管你用什麼形態,一定都有一個最大值的限制的:
64位元的形態為:9223372036854775807 ~ -9223372036854775808
(19位數)
128位元的形態為:
1.7014118346046923173168730371588e+38 ~ -1.7014118346046923173168730371588e+38
(38位數)
要無限位的,要用大數運算… (雖然事實上,也是有限位的,因為你電腦裡的記憶體不是無限的)
2006-09-16 06:23:08 · answer #2 · answered by Dave 7 · 0⤊ 0⤋
用陣列來寫四則運算的演算法就可以了
2006-09-15 19:13:04 · answer #3 · answered by Big_John-tw 7 · 0⤊ 0⤋
10位數超過 int 宣告資料所能存取位元組的變數,自然不行
你可以用
double
long double
這兩個試試
如果還不夠
就用大數演算法吧
2006-09-15 18:12:13 補充:
請參考
http://tw.knowledge.yahoo.com/question/?qid=1106082907640
2006-09-15 14:09:41 · answer #4 · answered by Xiao Lan 4 · 0⤊ 0⤋
int最大只有65535喔
所以應該是超出範圍了
2006-09-15 14:06:58 · answer #5 · answered by 冰月 1 · 0⤊ 0⤋
因為超過int的可容納範圍了
可以考慮改用更大範圍的資料型態
如long long
或者使用大數運算的方法
(請搜尋 大數運算 )
2006-09-15 14:04:24 · answer #6 · answered by adam! 5 · 0⤊ 0⤋