2014-01-23 99 views
-1

我有這個代碼適用於大多數輸入,但也有一些引起我的錯誤。例如「-1000000000000000000 1 1000000000000000000」。我的代碼不適用於某些大數字

#include <iostream> 
#include <cstdio> 

using namespace std; 
int x,y,m; 
int aux=0; 
int toPerfect(int a,int b,int per){ 
    if(a >= per || b >= per){ 
     aux=0; 

    }else if(a<=0 && b<=0){ 
       aux = -1; 
      }else{ 
       while(a < per && b < per){ 
         if(a > b){ 
          b = b+a; 
         }else{ 
          a = a+b; 
          } 
         aux++;   
       } 
       } 

    return aux; 
} 

int main(){ 
    cin >>x>>y>>m; 
    cout << toPerfect(x,y,m) << endl; 
    cin.get(); 

} 
+2

檢查你的系統上的sizeof(int)是什麼。如果是4,則不能存儲大於2^32 - 1的數字。 –

+0

如何解決使用long long代替int的問題?我嘗試過,但沒有幫助。 – user3152299

回答

2

您正在查看Integer Overflow。這個問題在這裏經常被問到,也許應該有一個這個名字的專用論壇。

...當算術操作試圖 創建一個數值,是太大而不能在 可用存儲空間內表示發生整數溢出。例如,將1加到可以表示的最大值 構成整數溢出。在這些情況下最常見的結果是存儲結果的最不重要的 可表示位(結果被稱爲 換行)。

2

我在這裏提到的一些數據類型的範圍。檢查出來,根據要求更改您的代碼。

signed char: -127 to 127 
unsigned char: 0 to 255 
signed short: -32767 to 32767 
unsigned short: 0 to 65535 
signed int: -32767 to 32767 
unsigned int: 0 to 65535 
signed long: -2147483647 to 2147483647 
unsigned long: 0 to 4294967295 
signed long long: -9223372036854775807 to 9223372036854775807 
unsigned long long: 0 to 18446744073709551615