2017-09-16 77 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; 
}