AtCoder Beginner Contest 169 A Je vais vous expliquer le problème "Multiplication 1".
URL du problème: https://atcoder.jp/contests/abc169/tasks/abc169_a
Étant donné les entiers $ A $, $ B $. Trouvez $ A x B $.
・ $ 1 \ leq A \ leq 100 $ ・ $ 1 \ leq B \ leq 100 $ ・ Toutes les entrées sont des entiers
Vous pouvez l'implémenter selon l'énoncé du problème. Vous trouverez ci-dessous des exemples de réponses en Python3, C ++ et 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);
}
}
Trouvez $ X × Y $. Cependant, les restrictions sont les suivantes. ・ $ 1 \ leq X \ leq 10 ^ 5 $ ・ $ 1 \ leq Y \ leq 10 ^ 5 $
Dans le cas de Python3, les valeurs qui peuvent être gérées par le type int sont infinies, donc ça va, mais
Essayons l'exemple de code de réponse C ++ pour la contrainte maximale de cette question.
contribution
{input.txt}
100000 100000
production
{output.text}
1410065408
À l'origine, c'est 10 $ ^ 5 x 10 ^ 5 = 10 ^ {10} $, donc je pense que beaucoup de gens pensent que ça ne ressemble pas à ça </ b> ...
Il s'agit d'un phénomène qui se produit dans le overflow </ font> </ b>, qui est un langage limité par la valeur qui peut être exprimée par le type int, comme C ++ et Java.
Diviser 10 $ ^ {10} $ par 2 $ ^ {31} $ donne un reste de 1410065408 $.
Les types C ++ et Java int peuvent représenter des valeurs comprises entre $ -2 ^ {31} $ et $ 2 ^ {31} -1 $. Par conséquent, comme le produit de type int et de type int est de type int, un tel débordement se produit. </ b>
En C ++, par exemple, l'utilisation de long long int
augmente les valeurs qui peuvent être exprimées.
Les valeurs qui peuvent être représentées par long long int
sont $ -2 ^ {63} $ à $ 2 ^ {63} -1 $.
Par conséquent, vous pouvez éviter le problème ci-dessus en écrivant le code suivant. </ font>
{Mesures de débordement.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
Les déclarations de problème et les exemples d'AtCoder ont parfois des notations telles que Attention au débordement
</ b> et les entiers 32 bits peuvent ne pas tenir. Il y a. Dans de tels cas, <b> doute </ b> si le type de variable est
long long int` avant de soumettre.
Un WA supplémentaire (réponse incorrecte) sera créé et une pénalité de 5 minutes sera appliquée .... </ font>
Recommended Posts