NYOJ128(测试数据提示)

NYOJ 128


  测了很长时间,一直runtime error。。才发现是数据输入的问题没有考虑完全

比如 + 2 3 (若3后面有空格)

        若数据之间有空格 ,你是否处理了?


因此,因为空格的原因。。一直runtime error

同时数组尽量开大一些。


这里给一个 手动处理 浮点数剧原生态代码。

#include<cstdio>
#include<iostream>
#include<stack>
#include<cstring>
using namespace std;

double stnum[501];

int top = 0;
void Calculation(char str)
{
	double a,b;
	a = stnum[--top] ;
	
	b = stnum[--top];

	
	switch(str )
	{
		case '+': stnum[top++] = (a+b);break; 
		case '-': stnum[top++] =(a-b);break;
		case '*': stnum[top++] =(a*b);break;
		case '/': stnum[top++] =(a/b);break;
				
	}
	
}

int main()
{
	int n,len,i;
	char str[10000],c;
	double sum1,sum2,j;
	
	while(gets(str)!=NULL)
	{
		 top = 0;	
		len = strlen(str);
		for(i=len -1 ; i>=0 ;)
		{
			if(str[i] >= '0' && str[i] <= '9')
		    {
		    	sum1 =0;j= 1;
		    	while(i>=0 && str[i] >= '0' && str[i] <= '9')
			    {
			    	sum1 += (str[i] - '0')*j;
			    	j*=10;
			    	i--;
				}
				if(i>=0 && str[i] == '.')
				{
					sum1 = (sum1)/j;
					sum2 = 0;i--;j = 1;
				    while(i>=0 && str[i] >= '0' && str[i] <= '9')
			        {
			    	  sum2 += (str[i] - '0')*j;
			    	  j*=10;
			    	  i--;
				    }	
					sum1 += sum2  ;
				}	
			//	printf("sum1-->%lf \n",sum1);
				stnum[top++] = sum1;
				
	     	}
	     	else if(str[i] == ' ') //多空格处理的
	     	{
	     		i--;
		}
	     	else
	     	{
	     		Calculation(str[i]);
	     		i--;
			}
	
		}
		printf("%.2lf\n",stnum[0]);
		top--;

	}
	return 0;
}

再给一个 sscanf 很好用  对字符串数据的处理


#include<stdio.h>

#include<string.h>

double stnum[1000];
//stack <char> ststr;
int top = 0;
void Calculation(char str)
{
	double a,b;
	a = stnum[--top] ;
	
	b = stnum[--top];

	
	switch(str )
	{
		case '+': stnum[top++] = (a+b);break; 
		case '-': stnum[top++] =(a-b);break;
		case '*': stnum[top++] =(a*b);break;
		case '/': stnum[top++] =(a/b);break;
				
	}
	
}

int main()
{
	int n,len,i;
	char str[1010],c;
	double sum1,j;
	
	while(gets(str)!= NULL)
	{
		 top = 0;	
		len = strlen(str);
		for(i=len -1 ; i>=0 ;)
		{
			if(str[i] >= '0' && str[i] <= '9')
		    {
		    	while(i>=0 && str[i] >= '0' && str[i] <= '9')
		    	{
		    		i--;
				}
				if(str[i] == '.')
				{
					i--;
				   while(i>=0 && str[i] >= '0' && str[i] <= '9')
		    	   {
		    		 i--;
				   }
				}
				i++;
				//printf("i-->%d\n",i);
				sscanf(&str[i],"%lf",&sum1);
				stnum[top++] = sum1;
				i--;
	     	}
	     	else if(str[i] == ' ')
	     	{
	     		i--;
			 }
	     	else
	     	{
	     		Calculation(str[i]);
	     		i--;
			}
	
		}
		printf("%.2lf\n",stnum[0]);
	
		
	
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值