C++获取int中的每个数字

Ily*_*sis 13 c++

我有一个整数:

int iNums = 12476;
Run Code Online (Sandbox Code Playgroud)

现在我希望将iNums中的每个数字都作为整数.就像是:

foreach(iNum in iNums){
   printf("%i-", iNum);
}
Run Code Online (Sandbox Code Playgroud)

因此输出将是:"1-2-4-7-6-".但我实际上需要每个数字作为int而不是char.

感谢帮助.

Aby*_*byx 39

void print_each_digit(int x)
{
    if(x >= 10)
       print_each_digit(x / 10);

    int digit = x % 10;

    std::cout << digit << '\n';
}
Run Code Online (Sandbox Code Playgroud)

  • +1:你打败了我的递归解决方案。我会把我的留在这儿,但你先到了。 (2认同)
  • @Andreas [除非你需要,否则不要使用`endl`](http://en.cppreference.com/w/cpp/io/manip/endl). (2认同)

Pét*_*rök 21

将其转换为字符串,然后迭代字符.对于您可能使用的转换std::ostringstream,例如:

int iNums = 12476;
std::ostringstream os;

os << iNums;
std::string digits = os.str();
Run Code Online (Sandbox Code Playgroud)

顺便说一句,通常使用的术语(对于你所谓的"数字")是"数字" - 请使用它,因为它使你的帖子的标题更容易理解:-)


D.S*_*ley 11

这是一个更通用但递归的解决方案,它产生一个数字向量:

void collect_digits(std::vector<int>& digits, unsigned long num) {
    if (num > 9) {
        collect_digits(digits, num / 10);
    }
    digits.push_back(num % 10);
}
Run Code Online (Sandbox Code Playgroud)

由于存在相对较少的数字,递归是有限的.


Ali*_*Ali -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 );
}
Run Code Online (Sandbox Code Playgroud)

  • 或者,等待一段时间,看看是否能得到更好的答案。最快不一定是最好的。 (33认同)
  • @AliEl-sayedAli 这太可怕了。使用浮点数“pow()”来计算**整数**本质上是不准确的。对于某些大整数,这很可能会给出**错误**结果。 (6认同)
  • 提前声明数字大小既繁琐又不必要 (3认同)