問題
お金は通常、丸め誤差を避けるためにセント単位の整数で保存され、表示するときだけドル表記に整形されます。
各項目について、<name> x<quantity> = <amount> という行を書きます。ここで amount = quantity × price in cents です。項目の後には、すべての行の合計である Total = <amount> を書きます。
すべての金額を、ドル、小数点、そしてちょうど 2 桁のセントとして整形してください。たとえば 5 → 0.05、1250 → 12.50 です。
format_invoice(names, quantities, cents) を実装してください。
Input
names, quantities, cents: 各項目を表す対応するリスト。
Output
項目行の後に合計行を続けたものを返してください。
制約
0 ≤ 商品の数 ≤ 1,000
1 ≤ quantity ≤ 1,000; 0 ≤ cents ≤ 10^6
例
入力:
cents = [250, 375]
names = ["Tea", "Cake"]
quantities = [2, 1]
期待される出力:
expected = ["Tea x2 = 5.00", "Cake x1 = 3.75", "Total = 8.75"]
入力:
std::vector<long long> cents = {250, 375};
std::vector<std::string> names = {"Tea", "Cake"};
std::vector<long long> quantities = {2, 1};
期待される出力:
std::vector<std::string> expected = {"Tea x2 = 5.00", "Cake x1 = 3.75", "Total = 8.75"};
入力:
long[] cents = new long[] {250, 375};
string[] names = new string[] {"Tea", "Cake"};
long[] quantities = new long[] {2, 1};
期待される出力:
string[] expected = new string[] {"Tea x2 = 5.00", "Cake x1 = 3.75", "Total = 8.75"};
解説
2 × 250 = 500 セントは 5.00、375 セントは 3.75 で、合計は 875 セントです: ["Tea x2 = 5.00", "Cake x1 = 3.75", "Total = 8.75"]。
入力:
cents = [5]
names = ["Gum"]
quantities = [3]
期待される出力:
expected = ["Gum x3 = 0.15", "Total = 0.15"]
入力:
std::vector<long long> cents = {5};
std::vector<std::string> names = {"Gum"};
std::vector<long long> quantities = {3};
期待される出力:
std::vector<std::string> expected = {"Gum x3 = 0.15", "Total = 0.15"};
入力:
long[] cents = new long[] {5};
string[] names = new string[] {"Gum"};
long[] quantities = new long[] {3};
期待される出力:
string[] expected = new string[] {"Gum x3 = 0.15", "Total = 0.15"};
解説
3 × 5 = 15 セントは 0.15 と書きます: ["Gum x3 = 0.15", "Total = 0.15"]。
解き方のヒント
まずは自分で考えてから、ヒントを 1 つずつ開いてみましょう。
ヒント 1
計算はすべて整数のセントで行います。
ヒント 2
セントをドル(cents / 100)と余り(cents % 100)に分けます。
ヒント 3
セントは常に 2 桁で書くので、5 セントは 0.05 です。
目安の計算量
時間 O(商品の数)、追加メモリ O(商品の数)
参考資料
この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。