逆波兰式计算表达式值

#include<stdio.h>
#include<string.h>
int a[257];
char str[257];
int main(){
	gets(str);
	int len = strlen(str);
	int i;
	int cnt =1;
//	for(i = 0;i<len;++i)
//	{
//		printf("%c",str[i]);
//	}
	for(i =0;i<len;++i)
	{
		int tmp = 0;
		int flag = 0;
		int f = 1;
//		if(str[i] == '-'&&str[i+1]>='0'&&str[i+1]<='9'&&i+1<len )
//		{
//			f = -1;
//			i++;
//		}
		while(str[i]>='0'&&str[i]<='9')
		{
			flag = 1;
			tmp = tmp*10 + str[i]-'0';
			i++;	
		}
		if(flag)
			a[cnt++] = f*tmp;
//		if(str[i]<='9'&&str[i]>='0')
//		{
//			a[cnt++] = f*(str[i]-'0');
//		}
		if(str[i] =='+')
		{
			int tmp1 = a[cnt-1];
			cnt--;
			int tmp2 = a[cnt-1];
			//cnt--;
			a[cnt-1] = tmp2+tmp1;
			 
		}
		else if(str[i] =='-')
		{
			int tmp1 = a[cnt-1];
			cnt--;
			int tmp2 = a[cnt-1];
		//	cnt--;
			a[cnt-1] = tmp2-tmp1;
		}
		else if(str[i] =='*')
		{
			int tmp1 = a[cnt-1];
			cnt--;
			int tmp2 = a[cnt-1];
			//cnt--;
			a[cnt-1] = tmp2*tmp1;
		}
		else if(str[i] =='/'){
			int tmp1 = a[cnt-1];
			cnt--;
			int tmp2 = a[cnt-1];
		//	cnt--;
			a[cnt-1] = tmp2/tmp1;
		}
	}
	//printf("%d ()", cnt);
	printf("%d",a[cnt-1]); 
	return 0;
}

上一篇:头文件 区别


下一篇:msyqldump实现mysql逻辑轻量备份