INPUT에서 값과 단위를 읽고
단위에 따라 변환 Multiplier을 곱하여 단위를 변환한다.
이 문제를 풀면서 새로 배웠던 부분은 iomanip의 setprecision(i)
0을 0.000 이런식으로 숫자에 포맷을 주고 싶을때 사용한다.
#include <iostream> #include <string> #include <vector> #include <iomanip> using namespace std; enum Unit{ NONE = -1, KILOGRAM, POUND, LITER, GALLON }; class Data{ public: static const string UNITSTR[]; static const double MULTIPLIER[]; double value; Unit unit; Data(void); void setData(Unit u, double v); Data convert(); void print(); }; const string Data::UNITSTR[] = {"kg","lb", "l", "g"}; const double Data::MULTIPLIER[] = {2.2046, 0.4536, 0.2642, 3.7854}; Data::Data(){ unit = NONE; value = 0; } void Data::setData(Unit u, double v){ unit = u; value = v; } Data Data::convert(){ double v = value * MULTIPLIER[unit]; int u; if(unit%2==0){ u = unit + 1; }else{ u = unit - 1; } Data d; d.setData((Unit) u, v); return d; } void Data::print(){ cout << fixed << setprecision(4) << value << " " << UNITSTR[unit] << endl; } int main(){ int t; cin >> t; cin.ignore(); vector<Data> v; for(int i=0; i<t; i++){ string input, value, unit; int pos; double d; Unit u; getline(cin, input); pos = input.find(" "); value = input.substr(0, pos); unit = input.substr(pos+1, input.length()-pos); d = stod(value); for(int j=0; j<4; j++){ if(unit==Data::UNITSTR[j]){ u = (Unit) (j); break; } } Data data; data.setData(u, d); data=data.convert(); v.push_back(data); } for(int i=0; i<t; i++){ cout << i+1 << " "; v[i].print(); } }