偶数 - 初学者

时间:2016-10-26 12:13:57

标签: c

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

示例:

  

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;
}

3 个答案:

答案 0 :(得分:3)

您的解决方案不起作用,因为您可能需要将奇数向上传播几个10的幂。

这是一个简单的方法:

  • 检查从最不重要到最重要的每个数字;
  • 对于每个奇数位,将数字提升到相应幂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();}