我是初学者,我正在尝试创建一个程序,该程序将生成仅使用偶数数字生成的数字,四舍五入到最接近的数字。
示例:
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;
}
答案 0 :(得分:3)
您的解决方案不起作用,因为您可能需要将奇数向上传播几个10的幂。
这是一个简单的方法:
xx1yyy
的模式变为xx2000
,模式x9yyy
变为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;
}
请注意,由于潜在的溢出,上述方法不适用于所有无符号值。
答案 1 :(得分:1)
感谢大家帮助我,但我自己设法解决了这个问题。
#include <stdio.h>
#include <stdlib.h>
int main() {
int a;
scanf("%d", &a);
while (a > 0) {
a++;
int n = a;
int cifra;
int flag = 0;
while (n > 0) {
cifra = n % 10;
if (cifra % 2 == 0) {
flag = 1;
n = n / 10;
} else {
flag = 0;
break;
}
}
if (flag) {
printf("%d", a);
return 0;
}
}
return 0;
}
答案 2 :(得分:0)
这可能会有所帮助。从数字开始,检查每个数字是否均匀。如果是,它将退出循环并打印值,否则它将增加数字并再次执行相同操作。这是一种无限循环。
byte[] byteSamples = new byte[(int)file.length()];
try {
BufferedInputStream buf = new BufferedInputStream(new FileInputStream(file));
buf.read(byteSamples, 0, byteSamples.length);
buf.close();
} catch (FileNotFoundException e) {
e.printStackTrace();}