سؤال

لدي على سبيل المثال الرقم الطويل 12345678901 وأريد الحصول على كل رقم بشكل منفصل لاستخدامه. حاولت بشدة لكنني لم أجعله حتى الآن؟ أيه أفكار؟

لكن لدي مشكلة في كل منهم عندما أجرب أولئك الذين لديهم عدد من 11 رقمًا وأكثر (ما أريد) يتوقف برنامجي عن العمل ، أنا أدير برنامجي في Visual Studio في أرقام أخرى من الحالات- بخير .. أي صلة بحقيقة أن رقمي طويل؟

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

المحلول

هذا سوف يمنحك أرقامًا في المتغير b.

long a = 12345678901;
while(a > 0) {
   long b = a % 10;
   a /= 10;
}

نصائح أخرى

std::vector<int> digits;

while(number > 0)
{
   digits.push_back(number%10); //push the last digit in
   number /= 10; //truncate the digit
}

std::reverse(digits.begin(), digits.end()); // the digits were in reverse order

تتمثل إحدى الطرق في تحويل الرقم إلى سلسلة (لست متأكدًا من الطريقة التي تكون بها من أجل ذلك ولكني أعلم أن مثل هذه الأشياء موجودة) ثم الوصول إلى كل حرف للسلسلة في وقت واحد.

long residual= number;
int base= 10;

do
{
    long digit= residual%base;
    std::cout << digit << '\n';
    residual/= base;
} while (residual!=0);

بدلاً من حساب الأرقام ، يمكنك الحصول على ما تريده عن طريق تحويله إلى سلسلة:

// This converts the binary representation of the long into a string.
std::stringstream ss;
ss << long_number;
std::string number_as_string = ss.str();

// Then visit all the characters of the string.
for (std::string::const_iterator it = number_as_string.begin();
     it != number_as_string.end();
     ++it)
{
    std::cout << *it << std::endl;
}

هذا سيطبع الأرقام ، على سبيل المثال ، إذا كان لديك 12345:

1
2
3
4
5

حتى تتمكن من معالجة كل منهم وهو يصل إلى التكرار *it كما الرمز أعلاه.

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