2016-12-06 43 views
-2

感謝您檢查此問題。 所以我不知道如何我可以得到輸出2^64,如果我輸入是2^64。 在無符號長長整型,它只是只能達到2^64-1 == 18446744073709551615 問題是,當輸入號碼== 18446744073709551616 的輸出將是「2^64」 但代碼,我必須是:我想得到輸出2^64沒有任何擴展在C + +

#include <iostream> 
#include <cmath> 
using namespace std; 
int main() 
{ 
    unsigned long long int a; 
    cin >> a; 
    if (a == pow(2,64)) 
    { 
    cout << "2^64"; 
    } 
} 

所以問題是,如果我輸入:18446744073709551616 它將不會輸出。我怎樣才能使輸出「2^64」?

+0

要得到2^n使用'1 << n'(或者如果n很大,則使用'1ULL << n') 。但64位整數類型無法表示2^64。唯一的解決方案是使用更大的類型 –

回答

0

unsigned long long是64位或更大。這意味着在某些機器上,它將只是64-bits。在這種情況下,您的代碼中會出現溢出問題。

+0

沒有兄弟,我想如果條件是真的,所以它是關鍵字文本「2^64」 – owenizedd

+0

@owenizedd確定請參閱編輯 –

+0

你是什麼意思溢出?對不起,我不明白。 – owenizedd

0

檢查ULLONG_MAX#include <climits>

類型無符號長長整型18446744073709551615(2^64-1)或更高* 實際值的一個目的最大值取決於特定的系統和庫實現上,但應該反映這些類型在目標平臺上的限制。

(來自http://www.cplusplus.com/reference/climits/)。

這意味着您的目標平臺支持64位無符號long long值。因此你的限制是2^64-1。

您可以嘗試使用大整數庫,如this來解決此限制。

-1

C++中最大的數據類型不同於編譯器和編譯器......但通常無符號long long int當然被認爲是大的! 所以要解決你的問題..,更好地改變如果條件pow(2,64)-1 ...

除此之外,如果你真的想在你的項目中實現該條件,你添加一個「你如果你的意思是「數字+ 1」,那麼繼續......;)

+0

'pow(2,64)'返回一個'double',因此'pow(2,64) - 1'不會**返回你預期。嘗試打印出'pow(2,64) - 1 == pow(2,64)'並看看 –

相關問題