2017-08-15 7 views
1
 System.out.print("Enter a number : "); 
     int n = sc.nextInt(); 
     int c, d, sum = 0,sum1=0,n1=0,count=0; 
     while(n>1) 
     { 
       c=n; 
       while(c>0) 
       { 
       d = c%10; 
       sum = sum + d; 
       c = c/10; 
       } 
       if(n%sum==0) 
       { 
       sum1=sum; 
       n1=n; 
       n=n/sum; 

       } 
       else 
       { 
        System.out.println("Not an harshad"); 
        break; 
       } 

     } 
      if(n1%sum1==0) 
      System.out.println("Number is multiple harshad"); 
      else 
      System.out.println("Number is not multiple harshad");  
    } 
} 

このコードは、複数のハッシュコード番号に対して正しく機能していません。同じ数字を出力するのは複数のharshadではありません.108と入力すると複数のharshadが得られますが、8を入力すると複数のharshad番号も与えられます。図8は、複数ハーシャッド数ないが複数のハッシュコード番号

サンプル入力:6804件の
回答:
6 + 8 + 0 + 4 = 18 => 18分の6804 = 378
378 => 3 + 7 + 8 = 18 = > 18分の378 = 21
21 => 2 + 1 = 3 => 3分の21 = 7

入力:126 出力:126 harshadされていない番号

+0

を試してみてください番号を入力して番号を確認するには、JavaでのWAPは、複数のharshadかではありません。複数のハーシュアードは、その数字の合計で割ったときに、別のハーシュアド数を生成すると言われています。 –

+1

あなたの質問を編集して、タイトルではなく質問自体に入力、期待される出力、実際の出力を含めるようにしてください。重要な情報や重要な情報、関連する情報は、質問自体の中にあるべきです。 –

+0

数字は、数字の合計で割り切れる場合、Harshadと呼ばれます。 たとえば、102は3で割り切れる。 34は7で割り切れないので、この商はHarshadではありません。 108は複数のハッシュ値です。プロセスは1: 108/9 = 12で終了します。 12/3 = 4; 4/4 = 1となる。 –

答えて

0

あなたは背中にsumをリセットするのを忘れ外側ループの各繰り返しで0。その結果、最初の反復だけが正しい桁の合計を計算します。

while(n>1) { 
      sum = 0; // add this 
      c=n; 
      while(c>0) 
      { 
      d = c%10; 
      sum = sum + d; 
      c = c/10; 
      } 
      if(n%sum==0) 
      { 
      sum1=sum; 
      n1=n; 
      n=n/sum; 

      } 
      else 
      { 
       System.out.println("Not an harshad"); 
       break; 
      } 

    } 
0
  • ループカウンタを使用してください。
  • ループカウンタを最後にチェックしてください(1桁の複数のハッシュ値の問題を解決するため)。
  • また、無限ループの問題を避けるために、すべての桁の合計が0(ゼロ)でないことを確認してください。

コード

の下
Scanner sc = new Scanner(System.in); 
    System.out.print("Enter a number : "); 
    int num = sc.nextInt(); 
    int dividend=num; 
    int divisor=0; 
    int digit; 
    int count=0; 

    while(dividend>1){ 
     divisor=0; 
     int temp=dividend; 
     while(temp>0){ 
      digit = temp%10; 
      divisor = divisor + digit; 
      temp = temp/10; 
     } 
     if(dividend%divisor==0 && divisor!=1){ 
      dividend = dividend/divisor; 
      count++; 
     }else{ 
       break; 
     } 
    } 
    if(dividend==1 && count>1){ 
     System.out.println("Number is Multiple Harshad"); 
    }else{ 
     System.out.println("Number is not Multiple Harshad"); 
    } 
+0

shubhamさんに感謝しています。私のコードには何があったのでしょうか? –

+0

1つのエラーは、カウンタ変数を定義して初期化しましたが、それより新しいものです。 –

関連する問題