不使用字符串也不除以 10 的数字转数字

use*_*112 5 c++ digits division

因此,存在这样的挑战:您必须编写一个代码,将 0-999 之间的数字拆分为数字,而不使用字符串或除以 10。我已经尽力尝试,但无法想出完美的算法。我的代码可以用于拆分数字 1-99,但我确实认为有一些更好的替代方案,无需使用 111 if 语句。好吧,这就是我得到的:

#include <iostream>

int main() {
    std::cout << "Enter a number ";
    int number;
    std::cin >> number;

    int cycles;
    if (number > 100) {
        cycles = 3;
    }
    else if (number > 10) {
        cycles = 2;
    }
    else {
        cycles = 1;
    }

    int digit[] = { -1, -1, -1 };
    for (int i = 0; i < cycles; i++) {
        if (number < 10) {
            digit[0] = number;
        }
        else if (number < 100) {
            if (number < 20) {
                digit[1] = number - 10;
                number = 1;
            }
            else if (number < 30) {
                digit[1] = number - 20;
                number = 2;
            }
            else if (number < 40) {
                digit[1] = number - 30;
                number = 3;
            }
            else if (number < 50) {
                digit[1] = number - 40;
                number = 4;
            }
            else if (number < 60) {
                digit[1] = number - 50;
                number = 5;
            }
            else if (number < 70) {
                digit[1] = number - 60;
                number = 6;
            }
            else if (number < 80) {
                digit[1] = number - 70;
                number = 7;
            }
            else if (number < 90) {
                digit[1] = number - 80;
                number = 8;
            }
            else {
                digit[1] = number - 90;
                number = 9;
            }
        }
        else if (number < 1000) {
            if (number < 200) {
                number -= 100;
            }
            else if (number < 300) {
                number -= 200;
            }
            else if (number < 400) {
                number -= 300;
            }
            else if (number < 500) {
                number -= 400;
            }
            else if (number < 600) {
                number -= 500;
            }
            else if (number < 700) {
                number -= 600;
            }
            else if (number < 800) {
                number -= 700;
            }
            else if (number < 900) {
                number -= 800;
            }
            else {
                number -= 900;
            }
        }
    }

    for (int i = 0; i < 3; i++) {
        if (digit[i] != -1) {
            std::cout << digit[i] << " ";
        }
    }
    std::cout << "\n";

    std::cout << "Press any key to exit... ";
    char i;
    std::cin >> i;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我被困住了,所以如果有人能够帮助我,我将不胜感激!

Ari*_*nen 3

基本上问题归结为,如何在不使用除法运算符的情况下实现除法运算符。由于可能性非常有限,即测试每个数字时只有 0-9 10 种可能的结果,一个简单的解决方案是遍历所有这些结果。您可以对每个问题使用乘法,但稍微快一点的方法是迭代可能的答案。因此,一个以基数(1,10 或 100)和您要分割的数字为基础的简单函数将是

int getDigit(int base, int number) {
  int digit = 0;
  for (int i = base;i <= number;i += base) ++digit;
  return digit;
}
Run Code Online (Sandbox Code Playgroud)

仅当 number < 10*base 时此函数才有效。所以你需要从最大的数字开始。然后从数字中减去基数*数字并重复,直到完成所有数字。