【发布时间】:2017-09-16 23:27:12
【问题描述】:
我在下面的代码中尝试做的是使输入成为一个四位数的数字(如果还没有的话),然后按升序和降序对数字中的数字进行排序。 x 上升,y 下降。然后我想减去x 和y,直到得到减法的结果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
我认为问题出在x 和y 上。我必须在某个时候将它们重置为零。但我不知道在哪里。我已经尝试了代码中的每一个地方。如果有人知道我哪里做错了,我将非常感谢您的帮助。
【问题讨论】:
-
我建议您尝试为您的变量提供更有意义的名称。
-
对下一个循环的继承不正确。
x、y、count这些必须重置。相反,substract不应重置为循环的开头。number、temp和count1在使用中存在混淆。重新考虑这些事情。 -
开始时不要在一行上定义所有变量,而是每个变量一行(并在使用它们的块中定义变量)
-
修复如this 但是,仍然存在一些问题。
标签: c calculation