4位数字的计算

标签 c calculation

我在下面的代码中尝试做的是使输入成为一个四位数字(如果还没有的话),然后按升序和降序对数字中的数字进行排序。 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 上。我必须在某个时候将它们重置为零。但我不知道在哪里。我已经尝试了代码中的每个地方。如果有人知道我哪里做错了,我将非常感谢您的帮助。

最佳答案

程序失败有多种原因:

  • 您没有为每次迭代将 xy 重置为 0
  • result 也应重置为 1
  • 循环的初始阶段太复杂:您应该测试 substract 是否为 06174 以停止循环并存储 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;
}

关于4位数字的计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46259344/

相关文章:

c - 序列栈和结构体指针

python - 将 numpy 数组除以 numpy 标量

javascript - 上标计算 Javascript 变量

python - 基于条件的 Pandas 数据框计算

c - 搜索并替换字符串并忽略空字节字符

c - 为动态字符串列表分配内存

Cygwin 显示错误 iostream.h 无法定位

c - const char * 和 strdup 在 C 中与 getopt 一起使用时是否具有相同的功能?

javascript - PHP、Javascript 获取mysql数据并在javascript中进行计算

c++ - 我如何正确获得BMI?