gpt4 book ai didi

c - 偶数 - 初学者

转载 作者:太空宇宙 更新时间:2023-11-04 01:21:58 27 4
gpt4 key购买 nike

我是一名初学者,我正在尝试创建一个程序,该程序将生成仅由偶数组成的数字,并四舍五入到最接近的偶数。

例子:

135 --> 200
2700 --> 2800

我有一个代码,但每当我尝试打印它时,数字只会增加 1,因为我在 while 循环中打印它,但每当我尝试在循环外打印它时,我都没有得到出来。

这是代码,请查看。

#include <stdio.h>
#include <stdlib.h>

int main() {
int a = 135;
int cifra;
int i = a;
int n;

while (i != 0) {
cifra = i % 10;
n = cifra;

if (n % 2 == 0) {
i /= 10;
} else {
++a;
}
}
return 0;
}

最佳答案

您的解决方案不起作用,因为您可能需要将奇数增加 10 的若干次方。

这里有一个简单的方法:

  • 检查每个数字从最低位到最高位;
  • 对于每个奇数位,将数字与 10 的相应次方的下一个倍数相加。xx1yyy 的模式变为 xx2000x9yyy 的模式 变为 X0000,其中 X 可能是奇数,将在下一次迭代中处理。

代码如下:

#include <stdio.h>
#include <stdlib.h>

unsigned next_even(unsigned n) {
for (unsigned div = 1; div <= n; div *= 10) {
unsigned digit = (n / div) % 10;
if (digit & 1) {
/* found an odd digit, bump number up to the
next multiple of div */
n = n - n % div + div;
}
if (div > UINT_MAX / 10) {
/* Prevent wrap around.
The result may be incorrect for numbers >= UINT_MAX / 10. */
break;
}
}
return n;
}

int main(int argc, char *argv[]) {
for (int i = 1; i < argc; i++) {
unsigned n = strtoul(argv[i], NULL, 0);
printf("%u -> %u\n", n, next_even(n));
}
return 0;
}

请注意,由于潜在的溢出,上述方法不适用于所有无符号值。

关于c - 偶数 - 初学者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40262001/

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