作者Dannvix (Dannvix)
看板C_and_CPP
標題Re: [問題] 處理溢位問題?
時間Mon Apr 12 21:14:18 2010
參考看看,應該不難理解
#include <iostream>
#include <limits.h> /* INT_MAX */
using namespace std;
int main (void) {
int a, b, c, d = 1;
cin >> a >> b;
c = a;
do {
if ((INT_MAX - a) < c) {
cout << "overflow!" << endl;
exit(1); /* terminate */
}
c = c + a;
d++;
} while (d != b);
cout << a << " * " << b << " = " << c << endl;
return 0;
}
※ 引述《xup6xu6 (是女的都好)》之銘言:
: 用int宣告變數寫乘法運算,要怎麼處理溢位問題
: int a,b,c,d=1;
: cin >> a >> b;
: c=a;
: do {
: c=c+a;
: d++;
: }
: while(d!=b);
: cout<<"a和b的積="<<c;
: 請問要怎麼改才能讓程式判斷當加到溢位時,cout<<"溢位囉!"
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.0.106
※ 編輯: Dannvix 來自: 61.229.0.106 (04/12 21:21)
推 xup6xu6:感謝,但我還沒學到那麼多程式庫,實在很難應用== 04/12 21:28
→ xup6xu6:不過我有爬文找到比較簡易的解決方法,等等補上 04/12 21:29
推 VictorTom:D大的例子裡沒有用到什麼特別的程式庫啊?? 04/12 21:32
→ VictorTom:不過小弟我好奇, 加數如果是負的是不是同樣有效XD 04/12 21:32
→ Dannvix:應該就爛掉了,所以這個方法實在頗為簡陋 :( 04/12 21:33
推 xup6xu6:因為還沒學過<limits.h>,所以根本不曉得要怎麼用 04/12 21:47
推 VictorTom:所以直接寫asm code check flag好了XD 04/12 21:51
→ VictorTom:難, 尤其當你打開它看過以後XDDD 04/12 21:52
推 ledia:要看是那個 limits.h 有的 include 盤根錯節 XD 04/12 22:27
推 VictorTom:這樣說也是XD 還有一海票的ifdef/endif....Orz 04/12 22:34
→ Dannvix:是說用 C/C++ 的話應該沒有辦法直接 access 到 flag? 04/12 23:21
→ tinlans:幹嘛不用 <limits> 的 numeric_limits<T>::max() ? 04/13 18:16