PDA

View Full Version : سوال: یک عدد تصادفی



mhzarei76
پنج شنبه 01 بهمن 1394, 19:21 عصر
با سلام من چطور میتونم یک عدد تصادفی با m رقم ایجاد کنم (m=4,5,6,7,8,9,12,13)

zero_ox
پنج شنبه 01 بهمن 1394, 20:55 عصر
سلام : با تابع ()rand می تونی اینکار رو بکنی

mhzarei76
جمعه 02 بهمن 1394, 08:02 صبح
با سلام من از این تابع استفاده کردم اما تا 5 رفم بیشتر نمیتونه تازه از long هم استفاده کردم مثل کد زیر چیکار باید بکنم تا 13 رقمی تولید کند
#include <stdio.h>#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
int main(){
long long int a;
srand(time(0));
a=rand();
printf("%lld",a);
}

Poores
جمعه 02 بهمن 1394, 09:45 صبح
میتونید از این تابع استفاده کنید.
با استفاده از عملگر های بیتی یک عدد رندم بین [0, 2^64-1] تولید میکنه.

unsigned long long unsignedLongLongRand()
{
unsigned long long rand1 = abs(rand());
unsigned long long rand2 = abs(rand());
rand1 = rand1 << (sizeof(int)* 8);
unsigned long long randULL = (rand1 | rand2);
return randULL;
}

rahnema1
شنبه 03 بهمن 1394, 00:14 صبح
سلام
همون طور که دوستمون اشاره کردند برای عدد ۱۳ رقمی می تونید از unsigned long long استفاده کنید که در ++C می تونید به شکل زیر ۱۰ تا عدد ۱۳ رقمی چاپ کنید

#include <chrono>

#include <algorithm>

#include <iostream>

int main()

{

std::default_random_engine generator( std::chrono::system_clock::now( ).time_since_epoch( ).count());

uniform_int_distribution<unsigned long long> distribution(1000000000000ULL, 9999999999999ULL);

for(int i = 0; i < 10; i++)

std::cout << distribution(generator) << std::endl;

}

اما اگه اصرار دارید حتما با تابع rand و به زبان c باشه به صورت زیر می تونید عمل کنید توی ویندوز در printf لازمه از I64u استفاده بشه همچنین تولید عدد تصادفی بسته به مقدار RAND_MAX داره مثلا در سیستم من مقدار RAND_MAX را 32767 نشون میده که برنامه زیر برای این مقدار RAND_MAX هست اما بعضی کامپابلر ها مقدار 2147483647 را نشون می دهند

#include <stdlib.h>

#include <time.h>

#include <stdio.h>

unsigned long long int ull_rand(const unsigned long long min, const unsigned long long max)

{

unsigned long long int result = 0;
int i;

for(i = 0; i < 4; i++)

{

result |= ((unsigned long long int)(rand() * 2 + rand() % 2)) << (i * 16);

}

return result % (max - min + 1) + min;

}

int main()

{

srand(time(0));
int i;

for(i = 0; i < 10; i++)

printf("%I64u\n", ull_rand(1000000000000ULL, 9999999999999ULL) );

}