본문으로 바로가기

[C++] 랜덤 무작위 수 난수 생성하기

category 프로그래밍 2018. 8. 15. 00:34

 

  필요 라이브러리

 

 stdlib.h

 난수 생성 rand()

 time.h

 새로운 값 부여

*iostream에 stdlib.h.가 내장되어 있는 경우도 있습니다.


 

  원리

 rand() 는 원래는 기본 seed 값에서 수를 가져오는 것 뿐입니다. 

기본적으로 계속 같은 수가 나오게 되어 있습니다. 

1
2
3
4
5
6
7
8
9
#include <iostream>
#include <stdlib.h>
using namespace std;
 
main(){
    int i;
    for ( i = 0; i < 10 ;i ++)
    cout << rand() << endl;
}



 

아무리 실행해도 이 값만 나온다...


그래서 seed 값을 바꾸어 주는 과정이 필요한데,

이것을 time.h 의 기능들을 이용해


현재의 시간을 받아오게 함으로써 seed값을 새로 설정해 주는 것입니다.

 

해결



1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
 
main(){
    srand((long)time(0)); // 
// long을 해주는 이유는 int 수의 범위를 벗어나서요.
// unsigned int를 해주셔도 괜찮아요
    int i;
    for ( i = 0; i < 10 ;i ++)
    cout << rand() << endl; //10개 출력
}
cs


time 값에 현재 시간을 대입합니다.

long을 사용하는 이유는 2억을 넘어가는 경우가 있기에
터지지 않도록 하는 것입니다

unsigned도 괜찮아요.

 

응용


1
cout << (rand() % 10000+ 1 << endl;
cs

출력하는 수 뒤에

 
 ( % 원하는 수 ) + 1 을 하면
원하는 범위 안을 구할 수 있습니다.