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

ايجاد Data Type يستوعب مضروب 1000 !

مغلق
بدأه darekman في 20 مارس 2003 · 3 رد · 583 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخواني الاعزاء...

ارجو منكم المساعدة بخصوص امكانية اي Data Type في استيعاب قيمة Factorial 1000 ... لقد حاولت كثيرا و استخدمت Long integer,double الخ.. و لكني لم اجد اي نوع يمكن ان يستوعب هذه القيمة الضخمة .....

شكرا...............

#2

Factorial 1000 :eek:

هذه قيمة كبيرة جداً... أنا شخصيا لم أجد حلّ لكنني لدي إقتراح, لماذا لا تقوم بتقسيم الرقم على 100000000 ثم في النهاية تكتب الجابة هي X*10^8

حيث يكون X من نوع Long بينما X*10^8 لا يتسع له الـ long...

مثلا..

نفرض أن لديك نوع بيانات لا يتسع لعدد أكبر من 1000, حسب طريقتي ستكتب 1890 كالتالي : "1.89 *10^3"

ما أقصده هو أن تبني دالة تقوم بتصغير الرقم كلما بلغ الحد الاقصى ثم تقوم بعرضه بطريقة خاصة... مثل برنامج الالة الحاسبة الملحقة بويندوز...

صراحة هذا مجرّد رأي خطر ببالي, من لديه إجابة أخرى فليطرحها...

#4

اخواني اعضاء المنتدى....

اشكر لكم اهتمامكم و ان كنت اتمنى الحصول على بعض المعلومات الاضافية من الاخوان المحترفين ...

لقد عثرت على الطريقة التي من الممكن ايجاد المضروب لأي عدد اصغر من 6000 و فكرة ذلك هي انشاء array of charecters و تحديد ال size الخاص بها عن طريق الدالة malloc(sizeof) و ادخال البيانات داخل المصفوفة على شكل (char) و اخراجها على الشاشة على شكل (integer) و سوف اقوم بارفاق الكود الآن ...

و اتمنى منكم اضافة التعليقات و المعلومات الاضافية للاستزادة ...

و شكرا .....

//**************************************

#include <conio.h>

#include <math.h>

#include <malloc.h>

#include <iostream.h>

#include <process.h>

void main()





    {

   	 unsigned int d;	//number of digits

   	 unsigned char *a;

   	 unsigned int j, n, q, z, t;

   	 int i;

   	 double p;

   	 

   	 cout << "nEnter the Not:";

   	 cin >> n;

   	 p = 0.0; //calculate the number of digits required

   	 for(j = 2; j <= n; j++)

      p += log10(j);

   	 d = (int)p + 1;

   	 a = (unsigned char*)malloc(d*sizeof(unsigned char));



       	 for (i = 1; i < d; i++)

          a = 0; //initialize

       	 a[0] = 1;

       	 p = 0.0;

       	 for (j = 2; j <= n; j++)





           	 {

              q = 0;	//initialize remainder to be 0

              p += log10(j);

              z = (int)p + 1;

              for (i = 0; i <= z/*NUMDIGITS*/; i++)





                  {

                 	 t = (a * j) + q;

                 	 q = (t / 10);

                 	 a = (char)(t % 10);

                  }

               	 }

               	 cout << "nThe Factorial isn";

               	 // the fact is stored ulta..

               	 for( i = d -1; i >= 0; i--)





                   	 {

                      cout << (int)a;

                   	 }

   	 getch();

                }

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

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