{ }codelper
小数の割り算P0216

1 リットルで走る距離

車が d キロメートル走り、燃料を l リットル使った。
一行に整数 d と l が空白一つで区切って与えられる。
燃料 1 リットルで走った距離、つまり d ÷ l を小数点以下ちょうど二桁で出力せよ。
商が整数でも二桁を書く(25 ÷ 5 → 5.00)。
入力は d × 100 が l で割り切れるものだけが与えられる。
そのため商は小数第二位までで終わり、丸める必要はない。

入力
1 ≤ d ≤ 100,000、1 ≤ l ≤ 1,000、d × 100 は l で割り切れる
出力
d ÷ l を一行、小数点以下ちょうど二桁
例 1 · stdin
25 2
stdout
12.50
例 2 · stdin
3 4
stdout
0.75
main.py
入力(stdin)

実行すると、これらの行が順に input()・標準入力に渡されます(実行中に入力を求めません)。

$ 準備完了

コードを入力して解くにはパソコンで開いてください。モバイルでは問題と解答を見られます。

ほかの言語では?言語別の解答を見る · 8 言語の解答

落とし穴は整数の割り算です。
C・C++・Java・C# の d / l は int 同士なので商だけが残ります(3 / 4 → 0)。
先に片方を実数にします:C・Java・C# は (double)d / l、C++ は static_cast<double>(d) / l。
(double)(d / l) のように割ってから変えたり、double km = d / l; のように実数の変数に入れるだけだったりすると、小数はもう捨てられたあとなので 3 4 で 0.00 になります。
Python 3・JS・TS・Craykon の / は整数どうしでも小数まで割ります(Python の // は商だけです)。
二つ目の落とし穴は桁数です。
そのまま出すと Python print(d / l) も JS・TS console.log(d / l) も 12.5 になり、商が整数なら JS は 5、Python は 5.0 になります。
小数二桁は Python f"{x:.2f}"、JS・TS x.toFixed(2)、C printf("%.2f")、C++ std::fixed << std::setprecision(2)、Java String.format("%.2f", x)、C# x.ToString("F2")、Craykon 文字.桁そろえ(x, 2) でそろえます。

Pythonmain.py · 3 行
d, l = map(int, input().split())# Python 3의 /는 정수끼리도 소수까지 나눈다(//는 몫만)print(f"{d / l:.2f}")
JavaScriptmain.js · 3 行
const [d, l] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);// toFixed(2)가 소수 두 자리 문자열을 만든다(12.5 → "12.50")console.log((d / l).toFixed(2));
TypeScriptmain.ts · 3 行
import { readFileSync } from "node:fs";const [d, l]: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);console.log((d / l).toFixed(2));
JavaMain.java · 13 行
import java.util.Locale;import java.util.Scanner; public class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int d = sc.nextInt();        int l = sc.nextInt();        // 한쪽을 double로 바꿔야 실수 나눗셈이 된다        double km = (double) d / l;        System.out.println(String.format(Locale.ROOT, "%.2f", km));    }}
C#Main.cs · 15 行
using System;using System.Globalization; class Program{    static void Main()    {        string[] p = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries);        int d = int.Parse(p[0]);        int l = int.Parse(p[1]);        // int끼리 나누면 몫만 남으니 한쪽을 double로        double km = (double)d / l;        Console.WriteLine(km.ToString("F2", CultureInfo.InvariantCulture));    }}
C++main.cpp · 9 行
#include <iomanip>#include <iostream> int main() {    int d, l;    std::cin >> d >> l;    double km = static_cast<double>(d) / l;    std::cout << std::fixed << std::setprecision(2) << km << "\n";}
Cmain.c · 10 行
#include <stdio.h> int main(void) {    int d, l;    scanf("%d %d", &d, &l);    /* int끼리 나누면 소수가 버려진다. (double)로 한쪽을 바꾼다 */    double km = (double)d / l;    printf("%.2f\n", km);    return 0;}
Craykonmain.cray · 5 行
p = コンソール.行読み().空白除去().分ける(" ");d = p[0].数に();l = p[1].数に();// 크레이콘의 /는 늘 소수까지 나눈다コンソール.書く(文字.桁そろえ(d / l, 2));