ورود

View Full Version : یه سوال



iut.ali
دوشنبه 19 اسفند 1392, 22:18 عصر
سلام کسی میدونه چطوری میشه یه متغیری داشت که یه عدد با یه حجم زیاد بگیره یعنی کار با long long و این چیزا هم حل نشه

motherboard
دوشنبه 19 اسفند 1392, 22:25 عصر
سلام کسی میدونه چطوری میشه یه متغیری داشت که یه عدد با یه حجم زیاد بگیره یعنی کار با long long و این چیزا هم حل نشه
سلام من هم همچین سوالی برام پیش اومده بود که در اخر فهمیدم برای کار با اعداد بزرگ باید از هدرفایل gmp استفاده کنم

motherboard
دوشنبه 19 اسفند 1392, 22:31 عصر
سلام من هم همچین سوالی برام پیش اومده بود که در اخر فهمیدم برای کار با اعداد بزرگ باید از هدرفایل gmp استفاده کنم

البته یه سورسی را برات گذاشتم که توان های خیلی بزرگ رو هم به دست میاره و از هدرفایل های اشنا هم درست شده.کد زیر 2 به توان 1000 رو به دست میاره البته میتونی از اعداد دیگه هم استفاده کنی.

#include <conio.h>
#include <math.h>
#include <iostream>
#include <string>

using namespace std;

//
void Tipper (string & Num)
{
int i;
char ch;

for( i=0; i< ( int(Num.size()/2)); i++)
{
ch = Num.at(i);
Num.at(i) = Num.at( ( Num.size()- 1)-i);
Num.at( ( Num.size()- 1)-i) = ch;
}
}
//

// Sum for heavy number
string sum ( string Num1 , string Num2)
{
int i;
int MaxLen;
int sum=0;
int r=0;
char ch;
string Num3;

Tipper(Num1);
Tipper(Num2);

if(Num1.size() < Num2.size())
{
MaxLen=Num2.size();
}
else
{
MaxLen=Num1.size();
}

for( i=0; i<MaxLen; i++)
{
sum=0;
if( i< int(Num1.size()))
{
sum += Num1.at(i)-48;
}
if( i< int(Num2.size()))
{
sum += Num2.at(i)-48;
}

ch = ( (sum+r) % 10) + 48;
Num3.push_back(ch);

r = (sum+r) / 10;
}

if(r != 0)
{
ch = r + 48;
Num3.push_back(ch);
}

Tipper(Num3);
return Num3;
}
// End of Sum for heavy number

//Multiplication for heavy number
string multiplication ( string Num1 , string Num2)
{
int i;
int j;
int t;
int r = 0;
int mult=0;
char ch;
string Num3;
string Sum = "0";

Tipper(Num1);
Tipper(Num2);

if( Num1.size() > Num1.size())
{
Num1.swap(Num2);
}

for ( i = 0; i < int(Num1.size()); i++)
{
r=0;

for ( t = 0; t < i; t++)
{
Num3.push_back( '0');
}

for ( j = 0; j < int(Num2.size()); j++)
{
mult = ( Num1.at(i)-48) * ( Num2.at(j)-48);
ch = ( ( mult + r) % 10) + 48;
Num3.push_back( ch);
r = ( mult + r) / 10;
}

if( r != 0)
{
ch = r + 48;
Num3.push_back( ch);
}

Tipper(Num3);

Sum = sum( Sum, Num3);

Num3.clear();
}

return Sum;
}
//end Multiplication for heavy number

//Power for heavy number
string power( string Num1, int Num2)
{
int i;
string result = "1";

for( i=0; i<Num2; i++)
{
result = multiplication(result,Num1);
}

return result;
}
//end Power for heavy number

int main()
{
cout<<power("2",1000)<<endl;
getch();
return 0;
}

حامد مصافی
سه شنبه 20 اسفند 1392, 17:16 عصر
برای تاپیک‌های بعدی از عنوان مناسبی استفاده کنید.