الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف يمكن تخزين رقم ضخم في متغير

مغلق
بدأه naim في 22 يوليو 2005 · 8 رد · 1,029 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم:

انا طالب حاسوب من غزة ,اريد المساعدة في عمل برنامج تشفير على (++VC) باستخدام RSA

ولكن RSA يستخدم ارقام ضخمة جدا لايمكن استواعبها من قبل انواع المتغيرات الموجودة متل long و int متل

	
long x,y;
x=pow(51,27);
y= x % 55;
cout<<y<<endl;

كيف يمكن حل هده المشكلة وهي استوعاب ارقام ضخمة من قبل المتغيرات, ارجوكم ساعدوني ببرنامج او متال لحل هده المشكلة.

شكرا.

ts_800_5_LiberateYourDesktop.jpg

MNFayyad

#2

معقول هل الحكي ,اين مبرمجي VC++,انها مشكلة لها حل ,بالتأكيد لها حل , لان اغلب برامج RSA مبرمجة VC++.

ارجوكم ساعيدوني.

ts_800_5_LiberateYourDesktop.jpg

MNFayyad

#3

انا سامع بمكتبات مساعدة فيها دعم لمثل هذه الشغلات .. حيث تمثل هذه الارقام بـ classes خاصة .. لكن لا اعرف اي منها

#4

جرب هذه المكتبة:

http://indigo.ie/~mscott/

Multiprecision Integer and Rational Arithmetic C/C++ Library

او هذه

http://www.programmersheaven.com/zone15/cat609/32597.htm

او بحث في جووجل عن شي مثل

c++ "big number library"

#5

يمكن إستخدام الرقم UINT64 , أو إستخدم , long int كنوع واحد , ستعطيك عرض بيانات ل 64 بت , ستكفي لحد كبير ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#6

السلام عليكم

كنت احب ان اضيف انه يمكنك تجربة الطريقه بنفسك وبدون استخدام مكتبات

(بالطبع ان لا اقول ان المكتبات ليست جيده ولكنى الفت انتباهك لما يمكن ان تجربه بنفسك)

فقد واجهتنا مشكله مثل هذه فى الكليه عندما طلب منا برنامج يقوم بحساب مضروب 1000 او اكثر

وهذه الاعداد كبيره جداً لا يمكن ان يتحملها اى data type موجود باللغه

ولكننا وجدنا الحل اثناء قراتنا فى كتاب object oriented programming in c++

وبالتحديد فىالفصل رقم 13 multifile programs

فالكاتب يحل المشكله عن طريف الاعداد الى string وانت تعرف ان الstring غير مقيد بعدد

محدد من الخانات وهذا يساهم فى حل المشكله

ويمكنك الاستعانه بالكتاب للتاكد من ذلك

اتمنى ان اكون قد افدت

سلااااااام

#7

السلام عليكم

هناك طريقتين لحفظ الارقام الكبيره اخى الكريم الطريقه الاولى شرحها الاخ عبد الواحد وهى بحفظ الارقام على شكل نصوص مشكله هذه الطريقه هى انه من الصعب التعامل معى الارقام مباشرة, والطريقه الثانيه هى ان تستخم دوال رياضيات وتحول الاعداد الكبيره لعديد صغير وبعكس الداله تستطيع الحصول على العدد الكبير مره اخرى, مشكله هذه الطريقه هى انها تعتمد على التقريب, بمعنى انك لا تحصل على العدد بالظبط ولكن تحصل على نتيجه تقريبيه, كمثال على ذلك يمكن حفظ الرقم 100 على النحو التالى :

log 100=2 نفترض ان لديك الرقم 200 إذاً يمكنك حفظ الرقم على النحو التالى 100+100= 200 => 200=inv(log 2)+inv(log 2) وهاكذا, كذالك يمكن إستخدام الـseries امثال Maclaurin وغيرهم الكثير...

بالتوفيق والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#8

الحل باستخدام الstring ممتاز ويحل المشكلة جزئيا وانت بحاجة طوال الوقت مراعاة ان المستخدم لن يدخل حرفا

وتحويلة كل مرة الى رقم والعكس هذه المشكلة اذا كان طول العدد مثلا مائة رقم فستحتاج الى 100 خانة للحتفاظ بالعدد

وهذه في رائي مصيبة اكثر من كونها حلا كان الافضل ان تستخدم مصفوفه من الاعداد بنفس الطول لكن مصيبة عن مصيبة تهون

الصراحة هذه المشكلة هي من اشهر المشاكل في عالم الخوارزميات ويطلق Long arithmetics (ترجمة حرفية للمصطلح الروسي ) الجل من هذا المنطلق

هل تذكرون كيف كنا نعمل لناخذ عددا ما 123 مثلا ونقسمه داخل مصفوفه كنا نقسم العدد على 10 ونضيف باقي القسمة

الى المصفوفة ونزيد العنوان الذي سنخزن فيه باقي القسمه وتستمر العملية حتى يصبح خارج القسمة صفرا

k=123;
i=0;
  do
  {
    a=k%10;
   k=k/10;
   i=i+1;
   }
while(k!=0)

ونحصل على العدد بطريقة عكسية هي

Pow(10,i)*a+..+ Pow(10,n-1)*a[n-1]

حيث n هي طول العدد (عدد الخانات )

في هذا النوع من المسائل سنقوم بتكبير العدد الاساس بدلا من 10 ال 10000 وبالتالى فان مصفوفة من ثلاث خانات من النوع

Int تستطيع ان تحفظ داحلها عدد من 12 خانة تصور فما بالك لو تستخدم كل قوة ال long int وخلافه

وعند الجمع مثلا تجمع الخانتين المنتاظرتين وتضع في المصفوفة الثالثة التي ستحوي الناتج في نفس الخانة باقي القسمة على الاساس بينما (10000 او اكبر على قدك ) خارج القسمة الى الخانة التالية وهكذا

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#9

جزاكم الله خيراً يا اخوه على التوضيح

هذا الموضوع مغلق.

مواضيع مشابهة