All challenges
Easy 0 solved 0% acceptance

Format an Invoice

Print invoice lines and a total with amounts stored in cents, formatted as dollars and cents.

What you'll learn

  • Store money as whole cents
  • Format cents as dollars with two digits
  • Build report lines and a total

Problem

Money is usually stored as whole cents to avoid rounding errors, and only formatted as dollars when it is shown.

For each item, write the line <name> x<quantity> = <amount>, where amount = quantity × price in cents. After the items, write Total = <amount> with the sum of all lines.

Format every amount as dollars, a dot and exactly two digits of cents, for example 5 → 0.05 and 1250 → 12.50.

Implement format_invoice(names, quantities, cents).

Input

names, quantities, cents: Matching lists describing each item.

Output

Return the item lines followed by the total line.

Constraints

0 ≤ number of items ≤ 1,000

1 ≤ quantity ≤ 1,000; 0 ≤ cents ≤ 10^6

Examples

Example 1
Input:
cents = [250, 375]
names = ["Tea", "Cake"]
quantities = [2, 1]

Expected output:
expected = ["Tea x2 = 5.00", "Cake x1 = 3.75", "Total = 8.75"]
Input:
std::vector<long long> cents = {250, 375};
std::vector<std::string> names = {"Tea", "Cake"};
std::vector<long long> quantities = {2, 1};

Expected output:
std::vector<std::string> expected = {"Tea x2 = 5.00", "Cake x1 = 3.75", "Total = 8.75"};
Input:
long[] cents = new long[] {250, 375};
string[] names = new string[] {"Tea", "Cake"};
long[] quantities = new long[] {2, 1};

Expected output:
string[] expected = new string[] {"Tea x2 = 5.00", "Cake x1 = 3.75", "Total = 8.75"};

Explanation

2 × 250 = 500 cents is 5.00 and 375 cents is 3.75; the total is 875 cents: ["Tea x2 = 5.00", "Cake x1 = 3.75", "Total = 8.75"].

Example 2
Input:
cents = [5]
names = ["Gum"]
quantities = [3]

Expected output:
expected = ["Gum x3 = 0.15", "Total = 0.15"]
Input:
std::vector<long long> cents = {5};
std::vector<std::string> names = {"Gum"};
std::vector<long long> quantities = {3};

Expected output:
std::vector<std::string> expected = {"Gum x3 = 0.15", "Total = 0.15"};
Input:
long[] cents = new long[] {5};
string[] names = new string[] {"Gum"};
long[] quantities = new long[] {3};

Expected output:
string[] expected = new string[] {"Gum x3 = 0.15", "Total = 0.15"};

Explanation

3 × 5 = 15 cents, which is written 0.15: ["Gum x3 = 0.15", "Total = 0.15"].

How to approach it

Try on your own first, then open one hint at a time.

Hint 1

Do all arithmetic in whole cents.

Hint 2

Split cents into dollars (cents / 100) and the remainder (cents % 100).

Hint 3

Always print the cents with two digits, so 5 cents is 0.05.

Expected complexity

O(number of items) time, O(number of items) extra space

References

This challenge is adapted for CodeUtility. Follow the statement and constraints above.

Learn from others

Community solutions

No published solutions yet. Solve this challenge to share the first one.