\ # 33 - 표현 식 값 구하 기

Description
덧셈 과 곱셈 만 포함 하 는 산술 표현 식 을 지정 합 니 다. 표현 식 의 값 을 프로 그래 밍 하 십시오.
Input
한 줄 만 입력 하 십시오. 계산 이 필요 한 표현 식 을 입력 하 십시오. 표현 식 에는 숫자, 덧셈 연산 자 만 포함 되 어 있 습 니 다. " +” 곱셈 연산 자 " *”,괄호 도 없고 연산 에 참여 하 는 모든 숫자 는 0 도착 하 다 231-1 사이 의 정수 입 니 다. 데 이 터 를 입력 하면 이 줄 만 있 습 니 다. 0~ 9、 +、 *이. 12 종문 자.
Output
출력 은 한 줄 뿐 입 니 다. 정 수 를 포함 하여 이 표현 식 의 값 을 표시 합 니 다. 주의: 답 의 길이 가 더 많 을 때 4 비트 시 마지막 출력 만 하 십시오 4 선도 0 출력 하지 않 음.
Sample Input
【     1】 1+1*3+4 【     2】 1+1234567890*1 【     3】 1+1000000003*1 

Sample Output
【     1】8【     2】 7891【     3】4

HINT
[입 출력 사례 설명]
본보기 1 계산 결과 8, 직접 출력 8。
본보기 2 계산 결과 1234567891, 출력 후 4 바로 7891。
본보기 3 계산 결과 1000000004, 출력 후 4 바로 4。
【 데이터 범위 】
... 에 대하 여 30% 의 데이터, 0 ≤ 표현 식 중 덧셈 연산 자 와 곱셈 연산 자의 총 수 ≤ 100;
... 에 대하 여 80% 의 데이터, 0 ≤ 표현 식 에서 덧셈 연산 자 와 곱셈 연산 자의 총 수 ≤ 1000;
... 에 대하 여 100% 의 데이터, 0 ≤ 표현 식 에서 덧셈 연산 자 와 곱셈 연산 자의 총 수 ≤ 100000.
Code:
#include  // 24ms Solution
#include 

#define SIZE 100001

using namespace std;

string a;
int num[SIZE];
char op[SIZE];

int main(int argc, char** argv)
{
	long long res = 0, i = 0, temp = 0, n = 0;
	
	cin >> a;
	
	for ( ; ; ) //         
	{
		if ((a[i] == '+') || (a[i] == '*'))
		{
			op[++n] = a[i];
			num[n-1] = temp;
			temp = 0;
		}
		else
		{
			temp = temp * 10 + a[i] - '0';
			temp %= 10000;
		}
		if (++i == a.size())
		{
			break;
		}
	}
	num[n] = temp;
	num[n] = temp;
	temp = num[0];
	for (i = 1; i <= n; i++)
	{
		if (op[i] == '+') //   ,          
		{
			res += temp;
			res %= 10000; //     
			temp = num[i];
		}
		else //   
		{
			temp *= num[i];
			temp %= 10000;
		}
	}
	
	printf("%d", (res % 10000 + temp % 10000) % 10000);
	
	return 0;
}

좋은 웹페이지 즐겨찾기