1
我在下面的代码中试图做的是输入一个四位数的数字(如果它还没有),然后按照升序和降序对数字中的数字进行排序。 x
正在升序,y
正在降序。然后我想减去x
和y
,直到我得到减法结果6174
。4位数字的计算
#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'在使用上有混淆。重新思考这些事情。 – BLUEPIXY
开始时没有在一行上定义所有的变量,而是每行一行(并在块中定义了变量) – Olaf