如何按顺序获取整数中的每个数字?

24
我有一个整数:
int iNums = 12476;

我想从中获取每个数字作为整数。就像这样:
foreach(iNum in iNums){
    printf("%i-", iNum);
}

所以输出将是:1-2-4-7-6-。但是我需要每个数字作为int而不是char。
17个回答

0

基于@Abyx的答案,但使用div,以便每个数字只进行一次除法运算。

#include <cstdlib>
#include <iostream>

void print_each_digit(int x)
{
    div_t q = div(x, 10);

    if (q.quot)
        print_each_digit(q.quot);

    std::cout << q.rem << '-';
}

int main()
{
    print_each_digit(12476);
    std::cout << std::endl;
    return 0;
}

输出:

1-2-4-7-6-

注意:仅适用于非负整数。


0
你可以使用while循环和模运算符来实现它。 它只是以相反的顺序给出数字。
int main() {
    int iNums = 12476;
    int iNum = 0;
    while(iNums > 0) {
        iNum = iNums % 10;
        cout << iNum;
        iNums = iNums / 10;
    }
}

0

// 在线C++编译器,可在线运行C++程序

#include <iostream>
#include <cmath>

int main() {
    int iNums = 123458;

// int iNumsSize = 5;

int iNumsSize = trunc(log10(iNums)) + 1; // Find length of int value
for (int i=iNumsSize-1; i>=0; i--) {
    int y = pow(10, i); 
// The pow() function returns the result of the first argument raised to 

the power of the second argument.
    int z = iNums/y;
    int x2 = iNums / (y * 10);
    printf("%d ",z - x2*10 ); // Print Values
}

    return 0;
}

0
我使用的答案是这个简单的函数:
int getDigit(int n, int position) {

    return (n%(int)pow(10, position) - (n % (int)pow(10, position-1))) / (int)pow(10, position-1);

}

希望有人会觉得这个有帮助!

0

借鉴 D.Shawley 的答案,我们可以进一步输出结果来完整回答:

void stream_digits(std::ostream& output, int num, const std::string& delimiter = "")
{
    if (num) {
        stream_digits(output, num/10, delimiter);
        output << static_cast<char>('0' + (num % 10)) << delimiter;
    }
}

void splitDigits()
{
    int num = 12476;    
    stream_digits(std::cout, num, "-");    
    std::cout << std::endl;
}

-1
int a;
cout << "Enter a number: ";
cin >> a;

while (a > 0) {
    cout << a % 10 << endl;
    a = a / 10;             
}

请在您的答案/代码中添加更多解释,以便更好地理解。 - Mahmoud Abdelsattar

-16
int iNums = 12345;
int iNumsSize = 5;
for (int i=iNumsSize-1; i>=0; i--) {
    int y = pow(10, i);
    int z = iNums/y;
    int x2 = iNums / (y * 10);
    printf("%d-",z - x2*10 );
}

3
提前声明数字大小既繁琐又没有必要。 - KillianDS
谢谢,这正是我需要的,因为我已经有一个固定的数字大小了。 - Ilyssis
33
或者,您可以稍等一段时间,看看是否能得到更好的答案。最快不一定是最好的。 - razlebe
6
这太糟糕了。使用浮点数函数pow() 来计算一个整数是本质上不准确的。对于某些大整数来说,这可能会导致错误的结果。 - The Paramagnetic Croissant
// 在线C++编译器,可在线运行C++程序 #include <iostream> #include <cmath>int main() { int iNums = 123458; // int iNumsSize = 5; int iNumsSize = trunc(log10(iNums)) + 1; // 查找整数值的长度 for (int i=iNumsSize-1; i>=0; i--) { int y = pow(10, i); // pow()函数返回第一个参数的第二个参数次幂的结果。 int z = iNums/y; int x2 = iNums / (y * 10); printf("%d ",z - x2*10 ); // 打印值 }return 0;} - Muhammad Umer Yasin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接