ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C++ - 덧셈 뺄셈 어렵게 하기
    프로그래밍 2009. 4. 28. 03:10

    이새벽에 잠이 안와.. 서는 아니고

    친구 과제를 해 주다가 오기가 생겨서 해서 올려봅니다.

    대충 이 소스의 결과는 이렇습니다.

    사용자 삽입 이미지

    한줄로 수식을 입력받아 덧셈과 뺄셈 연산을 하는데, 중간에 공백이 있어도 계산을 잘 해줍니다.

    막상 글을 적고나니 어렵게도 아니고 그냥 계산을 괴랄하게 하는 방법에 불과했군요.

    .....



    예외처리는 당장 에러 안나게만 했습니다.

    코드 전문은 아래에 있고, cpp파일 첨부했습니다.

    혹시 필요하신 분은 잘 사용하시길...

    태클이나 개선점도 받습니다.


    새벽에 이게 뭐하는짓이야! orz

    ---------------------------------------------------------------------------------------

    // in cpp
    #include <iostream>
    #include <string>
    using namespace std;

    int tenreturns(int index) // 자릿수 리턴 함수. 5자리까지만 입력가능
    {
        if(index == 0)
            return 1;
        else if (index == 1)
            return 10;
        else if (index == 2)
            return 100;
        else if (index == 3)
            return 1000;
        else if (index == 4)
            return 10000;
        else if (index == 5)
            return 100000;
        else
            return 1;
    }

    void main()
    {
        string longchar; // 문자열 선언
        getline(cin,longchar); // 문자열 입력

        int index = longchar.length(); // 문자열 길이를 입력받음

        int numbers[100][5]; // 숫자저장
        for(int i = 0 ; i < 100 ;i++) // 배열초기화
        {
            for(int j = 0 ; j < 5 ; j++)
            {
                numbers[i][j] = NULL;
            }
        }

        int adder[20]; // 부호저장
        for(int i = 0; i < 20 ; i++) // 배열초기화
        {
            adder[i] = NULL;
        }

        int adders = 0; // 1차원배열, 부호판단 인덱스
        int sindex = 0; // 2차원배열 인덱스

        int howlong[100];
        for(int i = 0 ; i<100 ; i++)
        {
            howlong[i] = NULL;
        }

        for(int i = 0; i < index ; i++) // 단어 하나하나 판별하는 과정
        {
            if(longchar[i] == ' ') {}

            else if(longchar[i] == '+')
            {
                adder[adders] = 0; // 0이면 더한다
                howlong[adders] = sindex; // 몇개의 단어가 들어왔는지 체크
                adders++;           
                sindex = 0; // 초기화
            }
            else if(longchar[i] == '-')
            {
                adder[adders] = 1; // 1이면 뺀다
                howlong[adders] = sindex; // 몇개의 단어가 들어왔는지 체크
                adders++;
                sindex = 0; // 초기화
            }
            else if(isdigit(longchar[i]) == 0)
            {
                cout<<"지정된 부호나 숫자만 입력하세요. 프로그램을 종료합니다"<<endl;
                break;
            }  // 부호, 스페이스 판별. 숫자가 아닌경우 에러발생       
            else
            {
                numbers[adders][sindex] = (int)(longchar[i]) - 48;           
                sindex++; // 2차원을 하나늘림
            }

            if( i+1 == index )
            {
                howlong[adders] = sindex;
            }
        }
       
        int fullnumbers[100]; // 배열을 숫자로 만들기 위한 일차원배열 선언
        for(int a= 0; a<100;a++) // 초기화
        {
            fullnumbers[0]=NULL;
        }
           
        for(int a = 0; a < 100 ; a++) // 이차원배열을 일차원배열로 수정
        {
            int num = 0;

            for(int b = 0; b < howlong[a] ; b++)
            {
                num += (numbers[a][howlong[a]-b-1] * tenreturns(b));
            }

            fullnumbers[a] = num;
            num = 0;
        }


        //계산부분
        int sum = 0;
        for(int i = 0 ; i < 100 ; i++)
        {
            if(i==0)
            {
                sum+=fullnumbers[i];
                continue;
            }
            else
            {
                if(adder[i-1] == 0)
                {
                    sum+=fullnumbers[i];
                    continue;
                }
                else if (adder[i-1] == 1)
                {
                    sum-=fullnumbers[i];
                    continue;
                }
            }
        }


        cout<<"계산값을 출력합니다 : "<<sum<<endl;
    }


    ---------------------------------------------------------------------------------------


Designed by Tistory.