ما نوع البيانات الذي يجب استخدامه لأرقام كبيرة جدًا في C ++؟

StackOverflow https://stackoverflow.com/questions/3595247

  •  02-10-2019
  •  | 
  •  

سؤال

لا بد لي من تخزين الرقم 600851475143 في برنامجي. حاولت تخزينه في long long int متغير و long double كذلك ولكن عند تجميعه يظهر الخطأ

integer constant is too large for "long" type. 

لقد حاولت أيضا unsigned long long int جدا. أنا أستخدم Mingw 5.1.6 لتشغيل G ++ على Windows.

ما نوع البيانات الذي يجب أن أستخدمه لتخزين الرقم؟

هل كانت مفيدة؟

المحلول

long long على ما يرام ، ولكن عليك استخدام لاحقة على الحرفي.

long long x = 600851475143ll; // can use LL instead if you prefer.

إذا تركت ll خارج نهاية الحرفي ، يفترض المترجم أنك تريد أن تكون int, ، وهو في معظم الحالات هو رقم موقّع 32 بت. 32 بت ليست كافية لتخزين هذه القيمة الكبيرة ، وبالتالي التحذير. عن طريق إضافة ll, ، أنت تشير إلى المترجم بأنه يجب تفسير الحرفي على أنه أ long long, ، وهو كبير بما يكفي لتخزين القيمة.

اللاحقة مفيدة أيضًا لتحديد الحمل الزائد للاتصال بوظيفة ما. فمثلا:

void foo(long long x) {}
void foo(int x) {}

int main()
{
    foo(0); // calls foo(int x)
    foo(0LL); // calls foo(long long x)
}

نصائح أخرى

كان لديك الفكرة الصحيحة مع long long int (أو unsigned long long int) ، ولكن لمنع التحذير ، تحتاج إلى إخبار المترجم بأن الثابت هو أ long long int:

long long int value = 600851475143LL;

يمكن أن تكون هذه "L" في حالة أقل ، لكنني أنصح ضدها-اعتمادًا على الخط ، غالبًا ما يشبه "L" الحالة السفلية إلى حد كبير مثل رقم واحد ("1") بدلاً من ذلك.

ألقِ نظرة على مكتبة GNU MP Bignum http://gmplib.org/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top