LoginSignup
0
0

More than 3 years have passed since last update.

AtCoder Beginner Contest 169 A問題「Multiplication 1」解説(Python3,C++,Java)

Last updated at Posted at 2020-08-11

AtCoder Beginner Contest 169 A問題「Multiplication 1」の解説を行います。

問題URL :
https://atcoder.jp/contests/abc169/tasks/abc169_a

問題概要

整数$A$,$B$が与えられる。
$A×B$を求めよ。

制約

・$1 \leq A \leq 100$
・$1 \leq B \leq 100$
・入力は全て整数

解説

問題文通りに実装すれば良いです。
以下、Python3,C++,Javaでの解答例を示します。

Python3での解答例
A169.py
x,y = map(int,input().split())
print(x*y)

C++での解答例
A169.cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
  int x,y;
  cin >> x >> y;
  cout << x * y << endl;
}

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);
  }
}

類題(オーバーフローに注意しましょう)

今回は制約が両方とも100以内なので大丈夫なのですが、このような場合はどうでしょう?

$X×Y$を求めよ。
ただし制約は以下の通りである。
・$1 \leq X \leq 10^5$
・$1 \leq Y \leq 10^5$

Python3の場合はint型で扱える値は無限なので大丈夫なのですが、

C++の解答例のコードでこの問題の最大制約の場合で実行してみます。

入力

input.txt
100000 100000

出力

output.text

1410065408

本来、$10^5 × 10^5 = 10^{10}$なので、このような表記にはならない...と思った方も多いと思います。

これはオーバーフローという、C++やJava等、int型で表現できる値で制限がかかっている言語で発生する現象です。

$10^{10}$ を $2^{31}$で割ると余りが$1410065408$となります。

C++やJavaのint型で表現できるのは $-2^{31}$から$2^{31}-1$までの値です。
よってint型とint型の積がint型であることから、このようなオーバーフローが発生してしまうのです。

C++では、例えば long long intを使うことで表現できる値が増えます。
long long intで表現できる値は$-2^{63}$から$2^{63}-1$です。
よって、以下のコードを書けば先ほどのような問題を回避できます。

overflow対策.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の問題文やサンプルには たまにオーバーフローに注意して下さい32bit 整数に収まらない場合もある.などの表記がある場合があります。
そのような場合は、変数の型がlong long intであるかどうかを疑ってから提出するようにしましょう。
余計なWA(不正解)ができてしまいペナルティ5分が発生してしまうので....

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0