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