gpt4 book ai didi

c++ - 不使用字符串也不除以 10 的数字到数字

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:38 25 4
gpt4 key购买 nike

所以有一个挑战,你必须编写一个代码,将 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;
}

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

最佳答案

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

int getDigit(int base, int number) {
int digit = 0;
for (int i = base;i <= number;i += base) ++digit;
return digit;
}

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

关于c++ - 不使用字符串也不除以 10 的数字到数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33203044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com