AtCoder Beginner Contest 169 A Ich werde das Problem "Multiplikation 1" erklären.
Problem-URL: https://atcoder.jp/contests/abc169/tasks/abc169_a
Angesichts der ganzen Zahlen $ A $, $ B $. Finde $ A x B $.
・ $ 1 \ leq A \ leq 100 $ ・ $ 1 \ leq B \ leq 100 $ ・ Alle Eingänge sind ganze Zahlen
Sie können es gemäß der Problemstellung implementieren. Nachfolgend finden Sie Beispiele für Antworten in Python3, C ++ und Java.
{A169.py}
x,y = map(int,input().split())
print(x*y)
{A169.cpp}
#include<bits/stdc++.h>
using namespace std;
int main(){
int x,y;
cin >> x >> y;
cout << x * y << endl;
}
{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);
}
}
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>