2013-07-30 165 views
2

我要生成一個很長的整數隨機數,我希望它是224位的隨機數。但是我能找到的最長數據類型是無符號long long,它是64位。首先我做到了這一點:生成隨機數隨着定義數據類型

#include <iostream> 
#include <string> 
#include <stdint.h> 
#include <stdlib.h> 
#include <ctime> 
#include "random.h" 
int main() 
{ 
    srand(time(0)); 

    unsigned long long num1 = rand(); 
    unsigned long long num2 = rand(); 

    cout<<"1st random number = " << num1 << endl; 
    cout<<"2nd random number = " << num2 << endl; 

    return 0; 
} 

我的想法是定義新的數據類型是224位整數。 所以,我試圖讓新random.h文件:

class int224 
{ 
    unsigned int data[7]; 
} 

,然後進行修改第一碼:

#include <iostream> 
#include <string> 
#include <stdint.h> 
#include <stdlib.h> 
#include <ctime> 
#include "random.h" 
int main() 
{ 
    srand(time(0)); 

    int224 num1 = rand(); 
    int224 num2 = rand(); 

    cout<<"1st random number = " << num1 << endl; 
    cout<<"2nd random number = " << num2 << endl; 

    return 0; 
} 

但它返回的錯誤,也許我犯了一個錯誤,當我定義了新的數據類型,我感謝任何幫助。謝謝。

+0

工作「..它返回的錯誤。」請列出它們。 – usr2564301

+2

即使'unsigned long long num1 = rand();'實際上也不會給你一個64位的隨機數。它將被限制在'rand()'返回的位數上,具體取決於實現。 – interjay

回答

1

我想出了下面的,不知道這是否會爲你

#include <iostream> 
#include <chrono> 
#include <random> 

struct int224 
{ 
    unsigned int data[7]; 

    int224 operator+(int224); 
    int224 operator-(int224); 

    int224() 
    { 
    unsigned seed = 
     std::chrono::system_clock::now().time_since_epoch().count(); 

     std::minstd_rand0 mygen (seed); 

     for(auto i=0;i<7;i++) 
     data[i]=mygen();  
    } 

    friend std::ostream& operator<<(std::ostream&, const int224&); 
}; 

std::ostream& operator<<(std::ostream& os, const int224& r) 
{ 
    for(auto i=0;i<7;i++) 
     os<<r.data[i]; 
    return os; 
} 

int main() 
{ 

    int224 r; 
    std::cout<<r<<std::endl; 

    int224 j; 
    std::cout<<j; 

    return 0; 
} 
+0

@POW我想這一點,並且錯誤是: 此文件需要爲即將到來的ISO C++標準C++ 0x中的編譯器和庫支持。此支持目前是實驗性的,必須使用-std = C++ 0x或-std = gnu ++ 0x編譯器選項啓用 – dulipat

+0

@dulipat C++ 0X是一個實驗性標準。官方命名爲C++ 11,但GCC中的實現不完整。您可以通過將'--std = C++ 0x'傳遞給編譯器來啓用它。檢查狀態頁面:http://gcc.gnu.org/projects/cxx0x.html抱怨說有東西壞了/無法正常工作。 – P0W

1

你沒有生成隨機int224和編譯器不知道類的功能。

您可以創建在int224自己Rand()功能和使用。該功能將把隨機數在各自爲陣的細胞

1

它不能這樣工作的。內置的rand函數返回一個int,並且只需將結果賦給更大的值即可使其返回更大的值。您必須實現更復雜的邏輯,並使用一些調用rand來初始化結果中的不同後續位。

1

作爲你有在該類中定義7的陣列,則必須調用rand函數7時間來初始化每個元素。

此外,如果你想要你的號碼是無符號的,那麼它是沒問題的,但如果你想讓它們被簽名,那麼在訪問這些數字時要注意,前6個是無符號的,最後一個是有符號的。

+0

對不起,我沒有關注你,你是什麼意思「調用rand函數7次初始化每個元素」?如何以及在哪裏調用rand函數? 是的,我想要的數字是無符號的。 – dulipat

+0

循環7次來分配數組數據的每個元素[7]。並在我的回答中保持第二點。因爲如果您嘗試在字符串中附加數字,它可能會產生問題。 – Saksham