AtCoder Beginner Contest 169 Explication du problème "Multiplication 1" (Python3, C ++, Java)

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

Résumé du problème

Étant donné les entiers $ A $, $ B $. Trouvez $ A x B $.

Contrainte

・ $ 1 \ leq A \ leq 100 $ ・ $ 1 \ leq B \ leq 100 $ ・ Toutes les entrées sont des entiers

Commentaire

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.

Exemple de solution en Python3

{A169.py}


x,y = map(int,input().split())
print(x*y)
Exemple de solution en C ++

{A169.cpp}


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

{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);
  }
}
## Sujet similaire (attention au débordement) Cette fois, les deux contraintes sont à moins de 100, donc ça va, mais qu'en est-il de ce cas?

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 estlong 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