How do I split an int into its digits?

前端 未结 15 1443
渐次进展
渐次进展 2020-11-27 17:51

How can I split an int in c++ to its single numbers? For example, I\'d like to split 23 to 2 and 3.

相关标签:
15条回答
  • 2020-11-27 17:51

    Declare an Array and store Individual digits to the array like this

    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 讨论(0)
  • 2020-11-27 17:51

    You can just use a sequence of x/10.0f and std::floor operations to have "math approach". Or you can also use boost::lexical_cast(the_number) to obtain a string and then you can simply do the_string.c_str()[i] to access the individual characters (the "string approach").

    0 讨论(0)
  • 2020-11-27 17:54
        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();
    }
    
    0 讨论(0)
  • 2020-11-27 17:55

    Reversed order digit extractor (eg. for 23 will be 3 and 2):

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

    Normal order digit extractor (eg. for 23 will be 2 and 3):

    std::stack<int> sd;
    
    while (number > 0)
    {
        int digit = number%10;
        number /= 10;
        sd.push(digit);
    }
    
    while (!sd.empty())
    {
        int digit = sd.top();
        sd.pop();
        //print digit
    }
    
    0 讨论(0)
  • 2020-11-27 17:55

    I don't necessarily recommend this (it's more efficient to work with the number rather than converting it to a string), but it's easy and it works :)

    #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 讨论(0)
  • 2020-11-27 18:00

    Given the number 12345 :

    5 is 12345 % 10
    4 is 12345 / 10 % 10
    3 is 12345 / 100 % 10
    2 is 12345 / 1000 % 10
    1 is 12345 / 10000 % 10

    I won't provide a complete code as this surely looks like homework, but I'm sure you get the pattern.

    0 讨论(0)
提交回复
热议问题