-
ضرب اعداد بزرگ
سلام
الگوریتمی که در زیر میبینید مربوط به ضرب اعداد بزرگ (برگرفته از کتاب طراحی الگوریتم نیپولیتان) هستش ، مشکل من اینه که باید این الگوریتم رو به یه زبان برنامه نویسی پیاده سازی کنم.
مشکلی که در پیاده سازی وجود داره اینه که مسلما این اعداد رو نمی شه بصورت int گرفت و نمی دونم اعداد بصورت رشته بخونم و یا ...
روشهای متعددی رو تست کردم ، چیزی مهمه اینه که باید از همین الگوریتم استفاده بشه.
از دوستان ، کسانی که در این مورد اطلاعات دارند لطفا کمک کنند.
کد:
large_integer prod (large_integer u, large_integer v)
{
large_integer x, y, w, z;
int n, m;
n = maximum (number of digits in u, number of digits in v)
if (u = = 0 || v = = 0)
return 0;
else if (n <= threshold)
return u × v obtained in the usual way;
else
{
m = [n/2];
x = u divide 10m; y = u rem 10m;
w = v divide 10m; z = v rem 10m;
return prod(x,w) x 102m + (prod(w,y)) x 10m + prod(y,z);
}
}
موفق باشید.
-
منظورت از اعداد بزرگ چه رنج اعدادیه؟
-
منظور از اعداد بزرگ اعدادی که در حالت عادی نمی توان ضرب آنها را در برنامه محاسبه کرد و این کار باعث سرریز می شود.
-
از دوستان کسی نمی تونه کمکم کنه ؟
-
دوست عزيز منم با همين مشكل شما برخورد كرده بودم همين چند روز پيش كه با كمك دوستان در همين فروم تونستم كد زيرو بنويسم ... احتمالا به دردتون مي خوره
کد:
#include <iostream>
using namespace std;
typedef int UI;
class Int
{
public:
Int():itsBigNumber(0){}
Int(char*);
~Int();
UI* GetInt() const { return itsBigNumber; }
friend ostream operator <<(ostream os,Int big)
{
for(int i=0;i<big.itsTemp;i++)
os <<(big.GetInt())[i];
return os;
}
private:
UI* itsBigNumber;
int itsTemp;
};
Int::Int(char* big)
{
int itsLen = itsTemp = strlen(big);
itsBigNumber = new UI[itsLen];
for(int i=0;i<itsLen;i++)
itsBigNumber[i] = big[i]-'0';
}
Int::~Int()
{
delete [] itsBigNumber;
itsBigNumber = 0;
}
int main()
{
char one[20000];
cout <<"enter your number:";
cin.getline(one,19999);
Int x = one;
cout <<x;
return 0;
}
در ضمن اگه سوالي داشتيد بپرسيد.
-
تو این تاپیک 4 عمل اصلی رو برای اعداد بزرگ نوشتم :
کد:
http://www.forum.p30world.com/showthread.php?t=233597&highlight=%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF