AtCoder Beginner Contest 169 Eine Erklärung des Problems "Multiplikation 1" (Python3, C ++, Java)

AtCoder Beginner Contest 169 A Ich werde das Problem "Multiplikation 1" erklären.

Problem-URL: https://atcoder.jp/contests/abc169/tasks/abc169_a

Problemzusammenfassung

Angesichts der ganzen Zahlen $ A $, $ B $. Finde $ A x B $.

Zwang

・ $ 1 \ leq A \ leq 100 $ ・ $ 1 \ leq B \ leq 100 $ ・ Alle Eingänge sind ganze Zahlen

Kommentar

Sie können es gemäß der Problemstellung implementieren. Nachfolgend finden Sie Beispiele für Antworten in Python3, C ++ und Java.

Beispiellösung in Python3

{A169.py}


x,y = map(int,input().split())
print(x*y)
Lösungsbeispiel in C ++

{A169.cpp}


#include<bits/stdc++.h>
using namespace std;
int main(){
  int x,y;
  cin >> x >> y;
  cout << x * y << endl;
}
Java-Antwortbeispiel

{A169.java}


import java.util.Scanner;
public class Main{
  public static void main(String[] args){
    Scanner scan = new Scanner (System.in);
    int x = scan.nextInt();
    int y = scan.nextInt();
    System.out.println(x*y);
  }
}
## Ähnliches Thema (Vorsicht vor Überlauf) Dieses Mal liegen beide Einschränkungen innerhalb von 100, also ist es okay, aber was ist mit diesem Fall?

Finde $ X × Y $. Die Einschränkungen sind jedoch wie folgt. ・ $ 1 \ leq X \ leq 10 ^ 5 $ ・ $ 1 \ leq Y \ leq 10 ^ 5 $

Im Fall von Python3 sind die Werte, die vom int-Typ verarbeitet werden können, unendlich, also ist es okay, aber

Versuchen wir den C ++ - Antwortbeispielcode für die maximale Einschränkung dieser Frage.

Eingang

{input.txt}


100000 100000

Ausgabe

{output.text}



1410065408

Ursprünglich ist es $ 10 ^ 5 x 10 ^ 5 = 10 ^ {10} $, also denke ich, dass viele Leute denken, dass es nicht so aussieht </ b> ...

Dies ist ein Phänomen, das beim Überlauf </ font> </ b> auftritt, einer Sprache wie C ++ oder Java, die durch den Wert begrenzt ist, der durch den Typ int ausgedrückt werden kann.

Das Teilen von $ 10 ^ {10} $ durch $ 2 ^ {31} $ ergibt einen Rest von $ 1410065408 $.

C ++ - und Java-Int-Typen können Werte von $ -2 ^ {31} $ bis $ 2 ^ {31} -1 $ darstellen. Da das Produkt vom Typ int und vom Typ int vom Typ int ist, tritt daher ein solcher Überlauf auf. </ b>

In C ++ beispielsweise erhöht die Verwendung von "long long int" die Werte, die ausgedrückt werden können. Die Werte, die durch long long int dargestellt werden können, sind $ -2 ^ {63} $ bis $ 2 ^ {63} -1 $. Daher können Sie das oben genannte Problem vermeiden, indem Sie den folgenden Code schreiben. </ font>

{Überlaufmaßnahmen.cpp}


#include<bits/stdc++.h>
using namespace std;
int main(){
  long long int x,y;
  cin >> x >> y;
  cout << x * y << endl;
}

{output.text}


10000000000

AtCoder-Problemanweisungen und -Beispiele haben manchmal Notationen wie Vorsicht vor Überlauf </ b> und 32-Bit-Ganzzahlen passen möglicherweise nicht hinein . </ b>. Es gibt. In solchen Fällen bezweifeln Sie , ob der Variablentyp vor dem Senden "long long int" ist. Eine zusätzliche WA (falsche Antwort) wird erstellt und eine Strafe von 5 Minuten wird verhängt .... </ font>

Recommended Posts