작성일 :

문제 링크

20374번 - Big Money

설명

여러 줄의 금액을 정확히 합산해 동일한 형식으로 출력하는 문제입니다.


접근법

부동소수 오차를 피하기 위해 각 금액을 센트 단위 정수로 변환해 합산합니다.

최종 합계를 다시 유로와 센트로 분리해 소수점 둘째 자리까지 출력합니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;

class Program {
  static void Main() {
    var data = Console.In.ReadToEnd();
    var parts = data.Split(default(char[]), StringSplitOptions.RemoveEmptyEntries);
    long sum = 0;

    foreach (var s in parts) {
      var idx = s.IndexOf('.');
      var euros = long.Parse(s.Substring(0, idx));
      var cents = int.Parse(s.Substring(idx + 1, 2));
      sum += euros * 100 + cents;
    }

    Console.WriteLine($"{sum / 100}.{(sum % 100):D2}");
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  string s;
  long long sum = 0;
  while (cin >> s) {
    size_t pos = s.find('.');
    long long euros = stoll(s.substr(0, pos));
    int cents = stoi(s.substr(pos + 1, 2));
    sum += euros * 100 + cents;
  }

  cout << sum / 100 << "."
       << setw(2) << setfill('0') << sum % 100 << "\n";

  return 0;
}