PDA

View Full Version : مبتدی: کار با اعداد بزرگ



partovinia
دوشنبه 04 آبان 1394, 10:15 صبح
سلام. من می خوام برنامه ای بنویسم که یک عدد یک رقمی رو به توان یک عدد 50 رقمی برسونه !هر جورکد نوشتم خطای infinity دارم وهر جور هم کد رو می خوام تغییر بدم باز هم به همون خطا برمی خورم ...از شما دوستان راهنمایی می خوام ! کدم رو می ذارم ...

class CalculatePower
{
int myGrade = 0;
BigInteger myPower = 0;

///
///constructor to get values
///
public CalculatePower(int grade, BigInteger power)
{
myGrade = grade;
myPower = power;
}


/// <summary>
/// method to get values in array
/// </summary>
public string CalcPower(int grade, BigInteger power)
{
try
{
//BigInteger myMulFunction = 1;
//myMulFunction = (BigInteger)Math.Pow((double)myGrade, (double)myPower);
//return myMulFunction.ToString();
int divideCounter = 0;
string dividePowers = "";
BigInteger secondPower = myPower;
int i = 0;
//
while (secondPower > 1000)
{
secondPower = secondPower / 2;
dividePowers = secondPower.ToString();
divideCounter += 2;
i++;
}
//
double strpower = 0;
strpower = double.Parse(dividePowers);
dividePowers = Math.Pow(grade, strpower).ToString();


dividePowers = Math.Pow(double.Parse (dividePowers), divideCounter ).ToString();

return dividePowers;


}
catch (Exception ex)
{
return ex.Message;

}
}

omid2048
دوشنبه 04 آبان 1394, 11:43 صبح
دوستان ممنون میشم منو هم راهنمایی کنید در همین زمینه
من میخوام یک عدد تصادفی 30 رقمی تولید کنم(البته میتونم اعداد تصادفی تا 10 رقم تولید کنم)روش تولید اعداد خیلی بزرگتر؟

partovinia
دوشنبه 04 آبان 1394, 12:07 عصر
دوستان ممنون میشم منو هم راهنمایی کنید در همین زمینه
من میخوام یک عدد تصادفی 30 رقمی تولید کنم(البته میتونم اعداد تصادفی تا 10 رقم تولید کنم)روش تولید اعداد خیلی بزرگتر؟
سلام دوست عزیز . این کد رو امتحان کنید

numberTextbox1.Text = "";
for (int i = 0; i < rnd.Next(200, 300); i++)
{
numberTextbox1.Text += rnd.Next(0, 10);
}

partovinia
دوشنبه 04 آبان 1394, 17:43 عصر
دوستان میشه یه توضیح کوچیک درباره کار کردن با اعداد خیلی بزرگ بدین ! من این کد رو نوشتم که توان رو به این صورت حساب کنه که خطای infinity نداشته باشه !
عدد به توان رسیده رو تقسیم می کنه و در رشته می ریزه !
حالا باید این تقسیمات رو در هم ضرب کنم ! دانسته های من هم خیلی کمه ! لطفا راهنماییم کنید!

class CalculatePower
{
int myGrade = 0;
BigInteger myPower = 0;

///
///constructor to get values
///
public CalculatePower(int grade, BigInteger power)
{
myGrade = grade;
myPower = power;
}


/// <summary>
/// method to get values in array
/// </summary>
public string CalcPower(int grade, BigInteger power)
{
try
{
//BigInteger myMulFunction = 1;
//myMulFunction = (BigInteger)Math.Pow((double)myGrade, (double)myPower);
//return myMulFunction.ToString();
int divideCounter = 0;
string dividePowers = "";
BigInteger secondPower = myPower;
int i = 0;
string str = "";
//
if (secondPower <= 1000)
{
dividePowers = Math.Pow((double)grade, (double)secondPower).ToString();
return dividePowers;
}

else
{
while (secondPower > 1000)
{
secondPower = secondPower / 2;
dividePowers = secondPower.ToString();
divideCounter += 2;
i++;
}
//
double strpower = 0;
strpower = double.Parse(dividePowers);
dividePowers = Math.Pow(grade, strpower).ToString();


//dividePowers = Math.Pow(double.Parse(dividePowers), divideCounter).ToString();

//string multiplication = "1";
for (int j = 1; j <= divideCounter; j++)
{
//multiplication = (BigInteger.Parse(str) * BigInteger.Parse(multiplication)).ToString();
str += dividePowers + ".";
}
//return multiplication;

return str;

}
}
catch (Exception ex)
{
return ex.Message;

}

Felony
دوشنبه 04 آبان 1394, 20:03 عصر
برای اعداد خیلی بزرگ باید بیخیال توابع ریاضی پیشفرض بشید ، فرض کنید روی کاغذ قراره عملیات رو انجام بدید (قرض دادن دهگان ، صدگان و ... ) تمامی عملیات روی کاغذ باید به صورت کد پیاده سازی شوند و نوع متغییر های شما رشته ای هست .

زمان جوونی با Delphi پیاده سازی کرده بودمش ، شاید به دردتون خورد .