2017-09-16 135 views
1

我在下面的代碼中試圖做的是輸入一個四位數的數字(如果它還沒有),然後按照升序和降序對數字中的數字進行排序。 x正在升序,y正在降序。然後我想減去xy,直到我得到減法結果61744位數字的計算

#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。我必須在某個時刻將它們重置爲零。但我不知道在哪裏。我已經嘗試了代碼中的每一個地方。如果有人知道我在哪裏做錯了,我會非常感謝幫助。

+2

我會建議想給你的變量更有意義的名稱。 –

+0

繼承到下一個循環是不正確的。 'x','y','count'這些必須重置。相反,'substract'不應該被重置到循環的開始。 'number','temp'和'count1'在使用上有混淆。重新思考這些事情。 – BLUEPIXY

+0

開始時沒有在一行上定義所有的變量,而是每行一行(並在塊中定義了變量) – Olaf

回答

2

程序無法爲多種原因:

  • 你不復位xy0每次迭代
  • 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; 
}