اذهب إلى المحتوى

السؤال

نشر

لدي برنامج أحتاج فيه أن أقارن أعداد أُسية كبير مثلاً أحتاج مقارنة إن كان 100 ^100  أكبر أم 72 ^115 , والذي ﻻ يمكنني تحقيقه لأن تقريبا لا يوجد نوع بيانات في لغة ال++c يمكنا حمل رقم بهذا الحجم , فما الحل

Recommended Posts

  • 1
نشر

إن كانت الأعداد ضخمة جداً لاينفع تخزينها ك int أو long، إنما عليك تخزينها كسلاسل نصية string فالحل إما إدخال القيمة كسلسلة نصية مثل

string s;

cin >> s;

الآن للمقارنة، بما أن العددين سلسلة نصية، نقارنهم حسب جدول ASCII أي أن المحرف '1' أصغر من المحرف '2' مثل مقارنة أعدادا عادية.. ولكن أولاً العدد الذي له خانات أكثر هو الأكبر بالطبع.

string s1, s2;
cin >> s1 >> s2;

if (s1.size() > s2.size()) // s1  أكبر

if (s1.size() < s2.size()) // s1  أصغر
                          
if (s1.size() == s2.size()) // نفس عدد الخانات هنا نقارن القيم
                          
    if (s1 > s2) // s1  أكبر
  	if (s1 < s2 ) // s1  أصغر
    if (s1 == s2) // تساوي

طبعا عليك إما استخدام break أو return في هذه الحالات..

في حال وجود قيم سالبة، افحص الخامة الأولى من السلسلة [0]s مثلا.. وتحتاج نفس المنطق بطريقة معكوسة

  • 0
نشر

يمكنك تحقيق ذلك عن طريق معرفة عدد خانات كل رقم منهم , ويتم ذلك عن طريق ضرب الأس في لوغاريتم العدد للأساس عشرة, فمثلاً إن أخذنا الأعداد التي وضعتها كمثال سيتم التعامل معها بالشكل التالي

100^100	:   100 * log100 = 200
72^15   :   15  *  log72 ~ 28

إذاً الرقم الأول أكبر بكل تأكيد

ويمكنك التأكد من ذلك الأمر عن طريق الإثبات الرياضي التالي:

إذا كان لوغاريتم س^ص= ص*لوغاريتم س
وإذا كان عدد خانات س-1 يساوي لوغاريتم س
إذاً يمكننا من الفرضين السابقين إستنتاج أن عدد خانات س^ص -1 يساوي
ص*لوغاريتم س

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...