отдельные цифры длинного числа в с ++ - PullRequest
0 голосов
/ 03 декабря 2010

Например, у меня есть длинный номер 12345678901, и я хочу, чтобы каждая цифра использовалась отдельно. Я очень старался, но до сих пор не смог? Есть идеи?

но у меня проблема во всех когда я пробую те с числом 11 и более цифр (то, что я хочу), моя программа перестает работать Я запускаю свою программу в визуальной студии в другом случае меньшие числа - просто отлично .. какая-либо связь с тем, что мой номер длинный?

Ответы [ 5 ]

3 голосов
/ 03 декабря 2010
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
2 голосов
/ 03 декабря 2010

Это даст вам цифры в переменной b.

long a = 12345678901;
while(a > 0) {
   long b = a % 10;
   a /= 10;
}
1 голос
/ 03 декабря 2010

Один из способов - преобразовать число в строку (не знаю, для чего предназначен метод, но я знаю, что такие вещи существуют), а затем получить доступ к каждому символу строки по одному.

0 голосов
/ 03 декабря 2010

Вместо того, чтобы вычислять цифры, вы можете получить то, что вы хотите, преобразовав его в строку:

// 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 как приведенный выше код.

0 голосов
/ 03 декабря 2010
long residual= number;
int base= 10;

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