أدم محمد2 نشر 24 سبتمبر 2021 أرسل تقرير نشر 24 سبتمبر 2021 لدي برنامج أحتاج فيه أن أقارن أعداد أُسية كبير مثلاً أحتاج مقارنة إن كان 100 ^100 أكبر أم 72 ^115 , والذي ﻻ يمكنني تحقيقه لأن تقريبا لا يوجد نوع بيانات في لغة ال++c يمكنا حمل رقم بهذا الحجم , فما الحل 1 اقتباس
0 شرف الدين حفني نشر 24 سبتمبر 2021 أرسل تقرير نشر 24 سبتمبر 2021 يمكنك تحقيق ذلك عن طريق معرفة عدد خانات كل رقم منهم , ويتم ذلك عن طريق ضرب الأس في لوغاريتم العدد للأساس عشرة, فمثلاً إن أخذنا الأعداد التي وضعتها كمثال سيتم التعامل معها بالشكل التالي 100^100 : 100 * log100 = 200 72^15 : 15 * log72 ~ 28 إذاً الرقم الأول أكبر بكل تأكيد ويمكنك التأكد من ذلك الأمر عن طريق الإثبات الرياضي التالي: إذا كان لوغاريتم س^ص= ص*لوغاريتم س وإذا كان عدد خانات س-1 يساوي لوغاريتم س إذاً يمكننا من الفرضين السابقين إستنتاج أن عدد خانات س^ص -1 يساوي ص*لوغاريتم س اقتباس
1 Wael Aljamal نشر 24 سبتمبر 2021 أرسل تقرير نشر 24 سبتمبر 2021 إن كانت الأعداد ضخمة جداً لاينفع تخزينها ك 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 مثلا.. وتحتاج نفس المنطق بطريقة معكوسة اقتباس
السؤال
أدم محمد2
لدي برنامج أحتاج فيه أن أقارن أعداد أُسية كبير مثلاً أحتاج مقارنة إن كان 100 ^100 أكبر أم 72 ^115 , والذي ﻻ يمكنني تحقيقه لأن تقريبا لا يوجد نوع بيانات في لغة ال++c يمكنا حمل رقم بهذا الحجم , فما الحل
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.