程式設計的問題!!為什麼不能進行呢???

2006-09-16 1:26 am
我是幫我朋友問的

她想問為什麼這個程式
用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;

}

回答 (6)

2006-09-16 4:39 am
✔ 最佳答案
剛剛用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-16 6:23 pm
不管你用什麼形態,一定都有一個最大值的限制的:
64位元的形態為:9223372036854775807 ~ -9223372036854775808
(19位數)

128位元的形態為:
1.7014118346046923173168730371588e+38 ~ -1.7014118346046923173168730371588e+38
(38位數)

要無限位的,要用大數運算… (雖然事實上,也是有限位的,因為你電腦裡的記憶體不是無限的)
2006-09-16 7:13 am
用陣列來寫四則運算的演算法就可以了
2006-09-16 2:09 am
10位數超過 int 宣告資料所能存取位元組的變數,自然不行
你可以用
double
long double
這兩個試試
如果還不夠
就用大數演算法吧

2006-09-15 18:12:13 補充:
請參考
http://tw.knowledge.yahoo.com/question/?qid=1106082907640
2006-09-16 2:06 am
int最大只有65535喔
所以應該是超出範圍了
2006-09-16 2:04 am
因為超過int的可容納範圍了
可以考慮改用更大範圍的資料型態
如long long

或者使用大數運算的方法
(請搜尋 大數運算 )


收錄日期: 2021-04-27 17:15:41
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20060915000014KK07109

檢視 Wayback Machine 備份