2016-10-22 7 views
0

フリップされた数字が含まれている桁数で割り切れる場合、1つの数字は面白いです。したがって、プログラムはインジケータn(n> 9)をSIから読み込む必要があります。 nより小さな興味深い数字を見つけて印刷してください。入力番号が無効な場合、「無効な入力」が表示されます。 これは私が書いたコードですが、動作させることはできません。 私は親切に助けを求めます。事前に おかげ与えられた整数よりも小さい最大の興味深い数字を見つけよう

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int n, flippedNumber=0, remainder; 
    int count = 0, i; 
    scanf ("%d", &n); 
    int largestInteresting = n; 
    while (n != 0) 
    { 
     n /= 10; 
     ++count; 
    } 
    while (n > 9) 
    { 
     for (i = 0; i < n; i++) 
     { 
      remainder = n%10;      
      flippedNumber = flippedNumber*10 + remainder; 
      n /= 10; 
     } 
     --largestInteresting; 
    } 
    if ((flippedNumber % count) == 0 && largestInteresting > i) 
     printf ("%d", largestInteresting); 
    else 
     printf ("Invalid input"); 
    return 0; 
} 
+1

* *これはやるんか?一つのことは、最初のwhileループは 'n == 0'まで実行され、' n'は決して '9'よりも大きいことができないため、2番目のループは決して実行されません。 –

+0

投稿されたコードが実行されると、ユーザーには点滅するカーソルが残され、ユーザーが次に行うことが予想されるものは示されません。ユーザーが何かを入力することが予想されるたびにプロンプ​​トを出力することを提案する。このプロンプトは、入力する入力の範囲とタイプをユーザーに伝える必要があります。 – user3629249

+0

の最初の 'while()'ループの最後に 'n'は0になります。次に、2番目の 'while()'ループは決して入力されません。可読性と理解を容易にするため – user3629249

答えて

0

の問題は、あなたのコードで:あなたが効果的に桁数をやっnを破壊したが、その値更新せずに他の何かのためにそれを再利用してみてください。(フォームlargestInterestingを?)あなたはあなたが探しているものが見つからないように、入力番号をカウントダウンするループで興味深い数字のチェックをしません。面白い数字のテストを行う前にループが完了するまで待つが、カウントダウンしている場合は最初の面白い数字を見つけたらループを完了する必要はない。以下

私のリワークは、私のねじれた上記の説明だけでなく、いくつかのスタイルの調整が組み込まれています

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int number; 

    (void) scanf ("%d", &number); 

    if (number < 10) 
    { 
     fprintf(stderr, "Invalid input\n"); 
     return EXIT_FAILURE; 
    } 

    for (int n = number; n > 9; n--) 
    { 
     int digitCount = 0; 
     int temporary = n; 

     while (temporary != 0) 
     { 
      temporary /= 10; 
      ++digitCount; 
     } 

     int flippedNumber = 0; 
     temporary = n; 

     for (int i = 0; i < digitCount; i++) 
     { 
      int remainder = temporary % 10; 
      flippedNumber = flippedNumber * 10 + remainder; 
      temporary /= 10; 
     } 

     if ((flippedNumber % digitCount) == 0) 
     { 
      printf("%d\n", n); 
      return EXIT_SUCCESS; 
     } 
    } 

    fprintf(stderr, "No interesting numbers found!\n");  
    return EXIT_FAILURE; 
} 

使用例

> echo 10 | ./a.out 
No interesting numbers found! 
> echo 100 | ./a.out 
89 
> echo 1000 | ./a.out 
999 
> echo 10000 | ./a.out 
8899 
> echo 100000 | ./a.out 
59999 
> echo 1000000 | ./a.out 
899997 
> 
関連する問題