2016년 4월 6일 수요일

4900 - 7 더하기

https://www.acmicpc.net/problem/4900

코드로 된 입력을 3자리씩 끊어서 0~9 중 해당하는 숫자로 변환한 후 연산하고 다시 코드로 변환했다.

#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;

string num[]={"063", "010", "093", "079", "106",
              "103", "119", "011", "127", "107"};
int ori[127];

int main(){
    int i, j, A, B, isA, pdec, dec, r;
    for(i=0; i<10; ++i) ori[atoi(num[i].c_str())]=i;
    string s;
    while(cin >> s){
        if( !s.compare("BYE") ) break;
        A = B = isA = 0;
        for(i=s.length()-2, pdec=1; i>1;){
            if(s[i]=='+'){ isA=1; --i; pdec=1; continue; }
            int sum = (s[i]-'0')+(s[i-1]-'0')*10+(s[i-2]-'0')*100;
            if(isA) A += ori[sum]*pdec;
            else B += ori[sum]*pdec;
            pdec *= 10;
            i -= 3;
        }
        cout<< s;
        char ret[11]={};
        sprintf(ret, "%d", A+B);
        for(i=0; i<strlen(ret); ++i) cout<< num[ret[i]-'0'];
        cout<<'\n';
    }
    return 0;
}
댓글 쓰기

게시글 목록