web-dev-qa-db-ja.com

Java整数除算の残り?

私はこのトピックについてあちこち探していましたが、まだわかりません。誰かが詳しく説明できるとしたら、とてもありがたいです。

私の仕事は、2つの変数を整数の除算として剰余で除算することです。問題は、剰余とは何なのか手がかりがないことです。今のところ、私はそのようなことをしました。これは、インターネットで検索して見つけたものです。

int a;
int b;
int remainder = Math.Pow(a,2) % b;

System.out.println("a^2 / b = " + Math.Pow(a,2) / b);
System.out.println("remainder = " + remainder);

たとえば、(a = 43)と(b = 67)を設定した場合

次に、このreslutを取得します。

a^2 / b = 27
remainder = 40

残りが何なのかわからないので(これはインターネットからの提案にすぎません)、これが正しい答えかどうかわかりません。

助けてくれてありがとう、

敬具

7
DisasterCoder

あなたが数学的なモジュロ演算を探しているなら、あなたは使うことができます

int x = -22;
int y = 24;
System.out.println(Math.floorMod(x, y));

あなたが数学の剰余に興味がない場合(残りだけ)、あなたは使うことができます

int x = -22;
int y = 24;
System.out.println(x%y);
15
SomeJavaGuy
    public static void main(String[] args) {
        int dividend = 139, divisor = 7;

        int quotient = dividend / divisor;
        int remainder = dividend % divisor;

        System.out.println("The Quotient is = " + quotient);
        System.out.println("The Remainder is = " + remainder);
    }

出力:

商は= 19です

残りは= 6

3
Taras Melnyk

はい %演算子は、整数の除算の残りを返します。

整数部の残りの部分について詳しく知るには、以下をチェックしてください Wikipedia

Aとdが整数で、dがゼロ以外の場合、a = qd + rおよび0≤r <| d |のような一意の整数qとrが存在することを証明できます。数値qは商と呼ばれ、rは剰余と呼ばれます。

1
João Neves

_%_演算子は、整数除算の残りを返します。

実際にはどのモジュールが内部で実行していますか?

モジュールは、cyclesと呼ばれるサイクルの数よりも小さい正の数に達するまで、ORを数から削除する傾向があります。reminderと呼ぶ負の数です。

ただし、_%_演算子の使用には時間がかかります。

同じ結果を得るときに_%_を使用しないようにするには、以下を使用できます。

  • While(a >= n) a -= n;aが正の数の場合)
  • While(a < 0) a += n;aが負の数の場合)

  • _a = n*q + r_は_r = a - n*q_を意味します_q is the integer division of a/n_はa%n == a - n * Math.toIntExact(a/n)を意味しますaが正の数の場合はこれで十分です.

  • aは負の数ですが、モジュールを与える_(a%n + n) % n_を使用できます。

時計のケースシナリオ:

現在9時の場合、4時間後の何時ですか_=>_ 9 + 4 = 13h _=>_ 13%12 = 1 _while 12 is the cycle number in the clock_

_24_時間前(昨日)から_9 O'clock_までの時間を計算する必要がある場合は、次のようになります。24(2*12) _=>_昨日は_9-24 = -15h_正しい答えは_9_です。これを解決するには、_(a%n + n) % n_を使用しますa%n == (a - n * Math.toIntExact(a/n))、次に-15 - 12 * Math.toIntExact(-15/12) = -3 => _-3 + 12 = 9_ => _9%12_ => 9 - 12 * Math.toIntExact(9/12) = 9これが正しい答えです。

これは、クロックシナリオのコードです。

_public static void main(String args[]){
    Scanner scanner = new Scanner(System.in);
    int a = scanner.nextInt(); // a = -15
    int n = scanner.nextInt(); // cycle = 12

    int reminder = a - (n * Math.toIntExact(a / n));
    int reminder_plus_n = (reminder + n);
    int modulo = reminder_plus_n - (n * Math.toIntExact(reminder_plus_n / n));
    System.out.println(modulo); // Answer = 9
} 
_
0
Abdel-Raouf

int remainder = a % b;で並べ替えます。剰余演算子は、除算の剰余を返します。


剰余演算子はモジュロ演算子とも呼ばれることに注意してください。ただし、Javaの場合、これは正しくありません。Javaは、左のオペランドaが負の場合、負の値を返します。

0
hd1