2016-03-13 87 views
0

我做了一個小程序,以確定用戶提供的整數的長度:是否有用戶可以輸入的最大整數長度?

#include <iostream> 

using namespace std; 

int main() 
{ 
    int c=0; //counter for loop 
    int q=1; //quotient of number upon division 

    cout << "Hello Cerberus! Please enter a number." << endl; 
    cin >> q; 

    if(q > -10 && q < 10) 
    { 
     cout << "The number you entered is 1 digit long." << endl; 
    } 
    else 
    { 
     while(q != 0) 
     { 
      q=q/10; 
      c++; 
     } 

     cout << "The number you entered is " << c << " digits long." << endl; 
    } 
    return 0; 
} 

它的工作原理相當不錯,除非該號碼來獲得太大。一旦輸入長度爲13位數字,程序默認爲「您輸入的數字爲1位數字」(除非數字介於-10和10之間,否則不應該顯示該解決方案)。

是否有用戶輸入整數長度的限制,或者是這個示範的我的電腦的內存限制?

回答

2

它在你的計算機的體系結構的限制。每種數字類型都有一個固定的上限,因爲該類型描述了具有固定大小的數據。例如,你的int很可能會佔用四個或八個字節的內存(取決於CPU;根據你的觀察,我會說前者),並且只能存儲這麼多的位組合很多字節的內存。

您可以確定使用std::numeric_limits平臺上的int的範圍內,但我個人建議使用固定寬度類型別名(例如int32_tint64_t)和採摘者爲準有足夠的範圍內爲您的應用堅持。

另外,確實存在所謂的「BIGINT」庫,基本上類包裝整數數組和添加巧妙的功能,使任意大型值的工作,如果他們算術類型。雖然這對你來說可能有點矯枉過正。

只是不要試圖開始使用浮點類型(float,double)來提升他們的魔法範圍;就像使用整型類型一樣,它們的精度基本上是有限的,但是使用浮點類型會增加額外的問題和關注點。

有用戶輸入沒有根本性的限制,雖然。這是因爲您的流正在轉換文本字符,並且您的流基本上可以擁有儘可能多的文本字符。在那個級別上,你實際上只受可用內存的限制。

+0

如果我想用對的int64_t 「Q」,我會句話吧: 的#include使用命名空間std 的#include ; INT主() { INT C = 0; // counter for loop int64_t q = 1; //在師 ... 這麼簡單一些商? – Cerberus

+0

@Cerberus:看起來不錯。 –

相關問題