hdu 1237 단순 계산기(아 날로 그+스 택)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 15075 Accepted Submission(s): 5132
Problem Description
+,-,*,/만 포함 하 는 비 마이너스 정수 계산 표현 식 을 읽 고 이 표현 식 의 값 을 계산 합 니 다.
Input
테스트 입력 은 몇 가지 테스트 사례 를 포함 하고 모든 테스트 사례 는 한 줄 을 차지 하 며 줄 당 200 자 를 초과 하지 않 으 며 정수 와 연산 자 사이 에 빈 칸 으로 구분 합 니 다.불법 표현 식 이 없습니다.한 줄 에 0 만 있 을 때 입력 이 끝나 면 해당 결 과 는 출력 하지 마 십시오.
Output
각 테스트 용례 에 대해 1 줄,즉 이 표현 식 의 값 을 소수점 뒤의 2 자리 까지 정확하게 출력 합 니 다.
Sample Input
1 + 2
4 + 2 * 5 - 7 / 11
0
Sample Output
3.00
13.36
Source
절 대 컴퓨터 대학원 재시험
Recommend
JGShining | We have carefully selected several similar problems for you: 1230 1235 1228 1248 1256
Statistic | Submit | Discuss | Note
이 문 제 를 나 는 뜻밖에도 대답 할 말 이 없다.
사실은 아 날로 그 계산기 다.여기 에는 작은 괄호 가 없 기 때문에 매우 간단 하 다.현재 연산 자 와 다음 연산 자의 우선 순 위 를 판단 해 야 합 니 다.
됐 습 니 다.각각 두 개의 스 택 에 숫자 와 기 호 를 저장 하고 제 가 사용 하 는 배열 입 니 다.
데이터 가 틀 렸 고 찾 을 수가 없어 서 요.N 여 시간 을 낭비 했다.
몇 가지 주의 할 점 이 있다.
1:입력 한 첫 번 째 숫자 가 0 이 라면 0+2+3 은 끝 이 아니 라 5.00 을 출력 해 야 합 니 다.
2:0(빈 칸)을 입력 하면 0.00 을 출력 해 야 합 니 다.바 글 바 글
3. 숫자 는 두 자리 와 두 자리 이상 일 수 있 습 니 다.
마지막 으로 입력 방식 을 바 꾸 면 됩 니 다.wa 와 ac 코드 를 첨부 합 니 다.
ac:
#include <stdio.h>
#include <string.h>
int main()
{
char fuhao[100],str[205];
double num[100],sum;
while(gets(str)&&strcmp(str,"0")!=0)
{
int len=strlen(str);
int t=0,q=0;
memset(num,0,sizeof(num));
memset(fuhao,0,sizeof(fuhao));
for(int i=0;i<len;i++)
{
if(str[i]>='0'&&str[i]<='9')
{
double temp=0;
while(str[i]>='0'&&str[i]<='9')
temp=temp*10+str[i]-'0',i++;
num[q++]=temp;
}
if(str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/')
fuhao[t++]=str[i];
}
memset(str,0,sizeof(str));
sum=num[0];
for(int i=1;i<q;i++)
num[i-1]=num[i];
for(int i=0;i<t;i++)
{
if(fuhao[i]=='*')
sum=sum*num[i];
else if(fuhao[i]=='/')
sum=sum/num[i];
else if(fuhao[i]=='+')
{
if(fuhao[i+1]=='*'||fuhao[i+1]=='/'&&i+1<t)
{
double temp=num[i];
while((fuhao[i+1]=='*'||fuhao[i+1]=='/')&&i+1<t)
{
if(fuhao[i+1]=='*')
temp=temp*num[i+1];
else
temp=temp/num[i+1];
i++;
}
sum=sum+temp;
}
else
sum=sum+num[i];
}
else if(fuhao[i]=='-')
{
if(fuhao[i+1]=='*'||fuhao[i+1]=='/'&&i+1<t)
{
double temp=num[i];
while((fuhao[i+1]=='*'||fuhao[i+1]=='/')&&i+1<t)
{
if(fuhao[i+1]=='*')
temp=temp*num[i+1];
else
temp=temp/num[i+1];
i++;
}
sum=sum-temp;
}
else
sum=sum-num[i];
}
}
printf("%.2lf
",sum);
}
return 0;
}
와 의
#include <stdio.h>
#include <string.h>
int main()
{
char fuhao[200];
double num[200],sum;
while(scanf("%lf",&sum)!=EOF)
{
char mark=getchar();
if(mark=='
'&&sum==0)
{
printf("%.2lf
",sum);
continue;
}
memset(fuhao,0,sizeof(fuhao));
memset(num,0,sizeof(num));
int t=0;
while(1)
{
scanf("%c",&fuhao[t]);
scanf("%lf",&num[t]);
mark=getchar();
if(mark=='
')
break;
t++;
}
for(int i=0;i<=t;i++)
{
if(fuhao[i]=='*')
sum=sum*num[i];
else if(fuhao[i]=='/')
sum=sum/num[i];
else if(fuhao[i]=='+')
{
if(fuhao[i+1]=='*'||fuhao[i+1]=='/')
{
double temp=num[i];
while((fuhao[i+1]=='*'||fuhao[i+1]=='/')&&i+1<=t)
{
if(fuhao[i+1]=='*')
temp=temp*num[i+1];
else
temp=temp/num[i+1];
i++;
}
sum=sum+temp;
}
else
sum=sum+num[i];
}
else if(fuhao[i]=='-')
{
if(fuhao[i+1]=='*'||fuhao[i+1]=='/')
{
double temp=num[i];
while((fuhao[i+1]=='*'||fuhao[i+1]=='/')&&i+1<=t)
{
if(fuhao[i+1]=='*')
temp=temp*num[i+1];
else
temp=temp/num[i+1];
i++;
}
sum=sum-temp;
}
else
sum=sum-num[i];
}
}
printf("%.2lf
",sum);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[HDU] 4089 활성화 확률 DPdp[i][j]를 모두 i개인의 대기열인 Tomato가 j위 서버가 마비될 확률로 역추를 사용하면 우리는 상태 이동 방정식을 얻을 수 있다. i == 1 : dp[1][1] = dp[1][1] * p1 + dp[1]...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.