A1100 Mars Numbers(20점)

2310 단어
1. 기술 총결산
4
  • 이 문제는 맵을 사용하여 인쇄하고 싶은 저장을 할 수 있다. 데이터 양이 많지 않기 때문에 마지막에 직접 출력할 수 있다.그래도 필요 없을 것 같아서.

  • 4
  • 주로 두 가지 문제를 고려한다. 첫째, 숫자가 문자열로 전환되고 실질은 진법 전환이다. 그러나 조금 다르다. 만약에 열 자리에 숫자가 있고 한 자리에 0이 있으면 이 0을 출력하지 않아도 된다.그래서 조건판단if(t/13 & t% 13)cout<<"를 사용하여 다음 출력이 필요한지 확인합니다. 그렇지 않으면 이 빈칸을 출력할 필요가 없습니다. 그리고if(t% 13)cout
    4
  • 그 다음에 문자열이 숫자로 바뀌면 전체 문자열을 저장한 다음에 각각 개위와 10위의 문자열, 즉 첫 번째 문자열과 두 번째 문자열을substr(a, b) 함수로 추출한다. a는 시작 주소이고 b는 추출할 길이이다.여기서 고려해야 할 문제는 첫 번째 즉 첫 번째 문자열이 a[]수조일 수도 있고 b[]수조일 수도 있다는 것이다.그러나 그 다음은 a[]수 그룹만 있고 두 개의 숫자로 진수 변환 출력을 저장하면 된다

  • 4
  • 또 하나의 문제는 무엇이 무엇으로 바뀌었는지 판단해야 한다는 것이다. 아래 코드를 보면 된다

  • 4
  • **getline(cin,str)을 사용하기 전에 입력한 적이 있으면,scanf가 이 형식으로scanf('%d%*c', &n)를 쓰거나 뒤와 같이 getchar()를,cin이면 그 다음에 getchar();**를 붙여야 한다

  • 2. 참고 코드
    #include
    #include
    #include
    #include
    using namespace std;
    string a[13] = {"tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};
    string b[13] = {"####", "tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"}; 
    string str;
    int len;
    void func1(int t){
        if(t / 13) cout << b[t/13];
        if((t / 13) && (t % 13)) cout << " ";
        if(t % 13 || t == 0) cout << a[t%13];
    }
    void func2(){
        int t1 = 0, t2 = 0;
        string s1 = str.substr(0,3), s2;
        if(len > 4) s2 = str.substr(4, 3);
        for(int j = 1; j <= 12; j++){
            if(s1 == a[j] || s2 == a[j]) t2 = j;
            if(s1 == b[j]) t1 = j;
        }
        cout << t1*13 + t2;
    }
    int main(){
        int n;
        //scanf("%d%*c", &n);
        cin >> n;
        getchar();
        for(int i = 0; i < n; i++){
            getline(cin, str);
            len = str.length();
            if(str[0] >= '0' && str[0] <= '9'){
                func1(stoi(str));
            }else{
                func2();
            }
            cout << endl;
        }
        return 0;
    } 

    좋은 웹페이지 즐겨찾기