PDA

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



Behzad_MCP
چهارشنبه 05 مرداد 1390, 19:16 عصر
سلام و بازم یه سوال تکراری
من 2 تا عدد بزرگ دارم میخوام ضربشون کنم
X=100000000 * 222 چکار کنم که Exception OverFlow نگیرم ؟

pouyansaraf
چهارشنبه 05 مرداد 1390, 19:54 عصر
سلام
بجای متغیر x از نوع integer - از int64 استفاده کن
در لینک زیر انواع تعریف متغیر ها وجود دارد

http://msdn.microsoft.com/en-us/library/hfa3fa08%28v=vs.71%29.aspx

alimanam
چهارشنبه 05 مرداد 1390, 19:56 عصر
با سلام

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim x As Int64
x = 10000000000 * 909374534
MsgBox(x)
End Sub

موفق باشید ./

Behzad_MCP
پنج شنبه 06 مرداد 1390, 13:04 عصر
مرسی از پاسخ هاتون . ولی هنوز یه مشکلی هست با اعداد بین 1000,000 و 1000,000,000 اگه حالشو داشتین چک کنید .
مثلا 221* 10,000,000 : Constant expression not representable in type 'Integer

salehbagheri
پنج شنبه 06 مرداد 1390, 13:42 عصر
دوست عزیز با کمی جستجو به پاسخ می رسیدید!

کافیه از BigInteger برای اعداد بزرگ استفاده کنید! چون فعلاً محدودیت نداره!


Dim BigInteger As New System.Numerics.BigInteger
BigInteger = Factorial(10000)

'' BigInteger Value = 2.8462596809×E35,659


قبلش فایل System.Numerics.Dll رو به Reference ها تون اضافه کنید!

Behzad_MCP
پنج شنبه 06 مرداد 1390, 13:54 عصر
دوست عزیزم مرسی از جوابت ولی مشکل استفاده از یک عدد بزرگ نیست بلکه مشکل در انجام عملیات ضرب یک عدد بزرگ می باشد

salehbagheri
پنج شنبه 06 مرداد 1390, 13:58 عصر
دوست عزیزم مرسی از جوابت ولی مشکل استفاده از یک عدد بزرگ نیست بلکه مشکل در انجام عملیات ضرب یک عدد بزرگ می باشد

من فکر میکنم شما منظور منو نگرفتید! دوباره بخونید!

Behzad_MCP
پنج شنبه 06 مرداد 1390, 14:10 عصر
Sorry ! I'm so confused now

salehbagheri
پنج شنبه 06 مرداد 1390, 14:18 عصر
به عنوان مثال ضرب دو عدد زیر رو در نظر بگیرید!


Dim BigIntegerOne As New System.Numerics.BigInteger(1000000000000000000)
Dim BigIntegerTwo As New System.Numerics.BigInteger(1000000000000000000)
Dim BigIntegerThree As System.Numerics.BigInteger = BigIntegerOne * BigIntegerTwo
MyLabel.Text = BigIntegerThree.ToString


فهمیدم مشکل شما چیه! به اون شکل فقط تا اعداد Long رو پشتیبانی میکنه!

Behzad_MCP
پنج شنبه 06 مرداد 1390, 14:59 عصر
آره دقیقا همینه وقتی عدد کوچکتر از 9000000 هست مشکلی نیست ضرب انجام میشه و وقتی عدد بزرگتر از 3000000000 هست بازم مشکلی نیست ضرب انجام میشه مشکل با اعداد بین این دو که گفتم هست که ضرب انجام نمیشه

salehbagheri
پنج شنبه 06 مرداد 1390, 15:56 عصر
آره دقیقا همینه وقتی عدد کوچکتر از 9000000 هست مشکلی نیست ضرب انجام میشه و وقتی عدد بزرگتر از 3000000000 هست بازم مشکلی نیست ضرب انجام میشه مشکل با اعداد بین این دو که گفتم هست که ضرب انجام نمیشه این مشکل بخاطر اینه که وقتی سمت راست شما دو عملوند ضرب از نوع Integer باشند، حاصل اونها هم از نوع Integer میشه! وقتی این مقدار در Integer قابل ذخیره سازی نباشه، پیغام خطا صادر میشه! برای رفع این مشکل به این صورت عمل کنید:


Dim x As Int64 = 90000000L * 222222


با قرار دادن L عدد سمت چپ از نوع Long شناخته میشه و حاصل ضرب هم Long درنظر گرفته میشه!

Behzad_MCP
شنبه 08 مرداد 1390, 17:32 عصر
مرسی دوست عزیز بسیار ظریف بود
این مشکل بخاطر اینه که وقتی سمت راست شما دو عملوند ضرب از نوع Integer باشند، حاصل اونها هم از نوع Integer میشه! وقتی این مقدار در Integer قابل ذخیره سازی نباشه، پیغام خطا صادر میشه! برای رفع این مشکل به این صورت عمل کنید:


Dim x As Int64 = 90000000L * 222222


با قرار دادن L عدد سمت چپ از نوع Long شناخته میشه و حاصل ضرب هم Long درنظر گرفته میشه!