【问题标题】:Calculation of 4 digit numbers4位数字的计算
【发布时间】:2017-09-16 23:27:12
【问题描述】:

我在下面的代码中尝试做的是使输入成为一个四位数的数字(如果还没有的话),然后按升序和降序对数字中的数字进行排序。 x 上升,y 下降。然后我想减去xy,直到得到减法的结果6174

#include <stdio.h>

int main() {
    int number, count = 0, digit, pow = 0, result = 1, counter, temp,
        x = 0, y = 0, i, j, substract = 0, count1 = 0;
    scanf("%d", &number);

    while (substract != 6174 && substract >= 0) {
        substract = 0;
        if (count1 > 0) {
            temp = substract;
        } else {
            temp = number;
        }
        while (temp > 0) {
            digit = temp % 10;
            temp = temp / 10;
            count++;
        }
        if (count < 4) {
            pow = 4 - count;
            /* Calculate base^exponent */
            for (counter = 0; counter < pow; counter++) {
                result = result * 10;
            }
            number = number * result;
        }

        for (i = 9, j = 0; i >= 0 && j <= 9; i--, j++) {
            int tmpNumber = number;
            while (tmpNumber > 0) {
                int digit = tmpNumber % 10;
                if (digit == i) {
                    x *= 10;
                    x += digit;
                } else
                if (digit == j) {
                    y *= 10;
                    y += digit;
                }
                tmpNumber /= 10;
            }
        }
        substract = x - y;
        count++;

        printf("\n x %d", x);
        printf("\n y %d", y);
        printf("\n substract %d", x - y);
    }
    return 0;
}

当我输入 3542 时,我期望的输出是这样的

输入:

3524

输出:

x 5432
y 2345
subtract 3087
x 8730
y 0378
subtract 8352
x 8532
y 2358
subtract 6174

但我得到的实际上是这样的:

输入:

3524

输出:

x 5432
y 2345
subtract 3087

x 54325432
y 23452345
subtract 30873087

我认为问题出在xy 上。我必须在某个时候将它们重置为零。但我不知道在哪里。我已经尝试了代码中的每一个地方。如果有人知道我哪里做错了,我将非常感谢您的帮助。

【问题讨论】:

  • 我建议您尝试为您的变量提供更有意义的名称。
  • 对下一个循环的继承不正确。 xycount 这些必须重置。相反,substract 不应重置为循环的开头。 numbertempcount1 在使用中存在混淆。重新考虑这些事情。
  • 开始时不要在一行上定义所有变量,而是每个变量一行(并在使用它们的块中定义变量)
  • 修复如this 但是,仍然存在一些问题。

标签: c calculation


【解决方案1】:

程序因多种原因失败:

  • 您不会在每次迭代中将 xy 重置为 0
  • result 也应重置为 1
  • 循环的初始阶段过于复杂:您应该测试substract0 还是6174 以停止循环并在循环结束时将substract 存储到number。李>

这是一个更简单的版本,不需要让数字有 4 位:

#include <stdio.h>

int main(void) {
    int number;

    if (scanf("%d", &number) == 1 && number >= 0 && number < 10000) {
        for (;;) {
            int x = 0, y = 0, substract;
            for (int i = 9, j = 0; i >= 0 && j <= 9; i--, j++) {
                for (int tmp = number, n = 0; n < 4; n++) {
                    int digit = tmp % 10;
                    if (digit == i) {
                        x *= 10;
                        x += digit;
                    } else
                    if (digit == j) {
                        y *= 10;
                        y += digit;
                    }
                    tmp /= 10;
                }
            }
            substract = x - y;
            printf("x %d\n", x);
            printf("y %d\n", y);
            printf("substract %d\n", substract);
            if (substract == 0 || substract == 6174)
                break;
            number = substract;
        }
    }
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 2017-08-06
    相关资源
    最近更新 更多