2010-11-23 9 views
19

Как я могу разбить int в C++ на его одиночные числа? Например, я хотел бы разделить 23 на 2 и 3.Как разбить int на его цифры?

+7

Думайте об этом как головоломку. Если вы все еще не можете понять, как это сделать, напишите, что вы пробовали, и люди могут комментировать. – 2010-11-23 22:25:11

+2

Возможный дубликат [Разделить целое число на его цифры C++] (http://stackoverflow.com/questions/4207696/split-an-integer-into-its-digits-c) – 2010-11-23 23:14:49

ответ

52

Учитывая число 12345:

5 является 12345 % 10
4 является 12345/10 % 10
3 является 12345/100 % 10
2 является 12345/1000 % 10
1 является 12345/10000 % 10

Я не буду предоставлять полный код, как это наверняка выглядит как домашнее задание , но я уверен, что вы получите шаблон.

2

приведение его в строку или обугливается [] и петля на нем

+2

Ugh. Это не может быть предпочтительным для мод. – jball 2010-11-23 22:25:27

+4

Разработка. Не имеет смысла бросать (C type cast) 'int' непосредственно в 'char []' в этой ситуации. – Akusete 2010-11-23 22:26:46

0

Начните с самой высокой мощностью в десять раз, что соответствует в int на ваш платформу (для 32 бит int: 1.000.000.000) и выполнить целое деление на нее. Результат - самая левая цифра. Вычтите этот результат размноженных с делителем от исходного числа, а затем продолжить ту же игру со следующей более низкой мощности в десять раз и перебирать, пока вы не достигнете 1.

2

Ниже будет делать трюк

void splitNumber(std::list<int>& digits, int number) { 
    if (0 == number) { 
    digits.push_back(0); 
    } else { 
    while (number != 0) { 
     int last = number % 10; 
     digits.push_front(last); 
     number = (number - last)/10; 
    } 
    } 
} 
4

Перевернутое заказ значный экстрактор (., например, для 23 будет 3 и 2):

while (number > 0) 
{ 
    int digit = number%10; 
    number /= 10; 
    //print digit 
} 

Нормальный порядок цифр экстрактор (., например, для 23 будет 2 и 3):

std::stack<int> sd; 

while (number > 0) 
{ 
    int digit = number%10; 
    number /= 10; 
    sd.push(digit); 
} 

while (!sd.empty()) 
{ 
    int digit = sd.front(); 
    sd.pop(); 
    //print digit 
} 
-3
for (size_t i = 0; i < sizeof(num); ++i, num>>1) 
{ 
    std::cout << (num&1) << "\n"; 
} 

Вы не указали базу.

0

Вы можете просто использовать последовательность операций x/10.0f и std :: floor, чтобы иметь «математический подход». Или вы также можете использовать boost :: lexical_cast (the_number), чтобы получить строку, а затем вы можете просто сделать the_string.c_str() [i] для доступа к отдельным символам («строковый подход»).

1

классический трюк заключается в использовании по модулю 10: x% 10 дает вам первую цифру (т.е. цифру единиц). Для других, вам нужно разделить первое (как показано на многих других постах уже)

Вот небольшая функция, чтобы получить все цифры в векторе (который является то, что вы, кажется, хотят сделать):

using namespace std; 
vector<int> digits(int x){ 
    vector<int> returnValue; 
    while(x>=10){ 
     returnValue.push_back(x%10);//take digit 
     x=x/10; //or x/=10 if you like brevity 
    } 
    //don't forget the last digit! 
    returnValue.push_back(x); 
    return returnValue; 
} 
0

Я не обязательно рекомендую это (это более эффективно работать с числом, а не преобразовывать его в строку), но это легко, и это работает :)

#include <algorithm> 
#include <iostream> 
#include <iterator> 
#include <string> 

#include <boost/lexical_cast.hpp> 

int main() 
{ 
    int n = 23984; 
    std::string s = boost::lexical_cast<std::string>(n); 
    std::copy(s.begin(), s.end(), std::ostream_iterator<char>(std::cout, "\n")); 
    return 0; 
} 
0

простой ответ на этот вопрос может быть: 1) Прочитать номер «n» от пользователя .... 2) Использование While Loop Уверен, что это не ноль ... 3) Возьмите модуль 10 из числа «n» .. Это даст вам свою последнюю цифру .... 4) Затем разделите число «n» на 10..Это удаляет последнюю цифру числа «n», поскольку в int decimal часть опущена .... 5) Дисплей Из числа ........

Я думаю, это поможет .... Я б простой код:

#include <iostream> 
using namespace std; 
int main() 
{int n,r; 

    cout<<"Enter Your Number:"; 
    cin>>n; 


    while(n!=0) 
    { 
       r=n%10; 
       n=n/10; 

       cout<<r; 
    } 
    cout<<endl; 

    system("PAUSE"); 
    return 0; 
} 
0
int n;//say 12345 
string s; 
scanf("%d",&n); 
sprintf(s,"%5d",n); 

Теперь вы можете получить доступ к каждой цифре с помощью s[0], s[1] и т.д.

0

вы можете посчитать, сколько цифр вы хотите напечатать первый

#include <iostream> 
#include <cmath> 
using namespace std; 

int main(){ 
int number, result, counter=0, zeros; 

do{ 
    cout << "Introduce un numero entero: "; 
    cin >> number; 

    }while (number < 0); 

    // We count how many digits we are going print 
    for(int i = number; i > 0; i = i/10) 
     counter++; 

    while(number > 0){ 

     zeros = pow(10, counter - 1); 

     result = number/zeros; 
     number = number % zeros; 
     counter--; 

     //Muestra resultados 
     cout << " " << result; 
    } 
    cout<<endl; 

}

1

Объявите массив и хранить отдельные цифры в массив как этот

int num, temp, digits = 0, s, td=1; 
int d[10]; 
cout << "Enter the Number: "; 
cin >> num; 
temp = num; 
do{ 
    ++digits; 
    temp /= 10; 
} while (temp); 

for (int i = 0; i < digits-1; i++) 
{ 
    td *= 10; 
} 

s = num; 
for (int i = 0; i < digits; i++) 
{ 
    d[i] = s/td %10; 
    td /= 10; 

} 
0

На основании ответа icecrime, я написал эту функцию

std::vector<int> intToDigits(int num_) 
{ 
    std::vector<int> ret; 
    string iStr = to_string(num_); 

    for (int i = iStr.size() - 1; i >= 0; --i) 
    { 
     int units = pow(10, i); 
     int digit = num_/units % 10; 
     ret.push_back(digit); 
    } 

    return ret; 
} 
0
int power(int n, int b) { 
    int number; 
    number = pow(n, b); 
    return number; 
} 


void NumberOfDigits() { 
    int n, a; 
    printf("Eneter number \n"); 
    scanf_s("%d", &n); 
    int i = 0; 
    do{ 
     i++; 
    } while (n/pow(10, i) > 1); 
    printf("Number of digits is: \t %d \n", i); 

    for (int j = i-1; j >= 0; j--) { 
     a = n/power(10, j) % 10; 
     printf("%d \n", a); 
    } 
} 

int main(void) { 
    NumberOfDigits(); 
} 
Смежные вопросы