zoukankan      html  css  js  c++  java
  • 简单四则运算

    问题描写叙述: 
    输入一个仅仅包括个位数字的简单四则运算表达式字符串。计算该表达式的值
    注:
    1、表达式仅仅含 +, -, *, / 四则运算符。不含括号
    2、表达式数值仅仅包括个位整数(0-9),且不会出现0作为除数的情况
    3、要考虑加减乘除按通常四则运算规定的计算优先级
    4、除法用整数除法,即仅保留除法运算结果的整数部分。

    比方8/3=2。

    输入表达式保证无0作为除数情况发生
    5、输入字符串一定是符合题意合法的表达式,当中仅仅包含数字字符和四则运算符字符。除此之外不含其他不论什么字符,不会出现计算溢出情况
    要求实现函数: 
    int calculate(int len,char *expStr)
    输入:int len:字符串长度;char* expStr:表达式字符串;
    输出:无

    返回:计算结果


    C代码例如以下:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<ctype.h>//包括isdigit函数
    
    #define MAX 100
    
    int calculate(int len, char* expStr);
    
    int main()
    {
    	char *str = (char*)malloc(2*MAX*sizeof(char));
    	int len;
    	printf("please input the expr:");
    	scanf("%s",str);
    	len = strlen(str);
    	printf("after calculation, the result is: %d
    ", calculate(len,str));
    	return 0;
    }
    
    int calculate(int len, char* expStr)
    {
    	char operation[MAX];
    	int number[MAX];
    	int op_index = 0;
    	int num_index = 0;
    	int i;
    	for(i=0; i<len; i++)
    	{
    		if(isdigit(*(expStr+i)))//假设是数字,则进入数字数组
    		{
    			number[num_index] = *(expStr+i) - '0';
    			num_index++;
    			continue;
    
    		}
    		if(*(expStr+i) == '*')//假设是乘法,能够先计算出其左右两数之乘积
    		{
    			number[num_index-1] *= (*(expStr+i+1)-'0');
    			i++;//由于已经将乘号右边的数取出来了
    			continue;
    		}
    		if(*(expStr+i) == '/')//假设是除法,能够先计算其左右两数之商
    		{
    			if(*(expStr+i+1) == '0')
    			{
    				printf("Error: 0 can not be the divisor!
    ");
    				exit(1);
    			}
    			else
    			{
    				number[num_index-1] /= (*(expStr+i+1)-'0');
    				i++;//由于已经将除号右边的数取出来了
    				continue;
    			}
    		}
    		if(*(expStr+i) == '+' || *(expStr+i) == '-')//对于加减法,则须要进入符号数组
    		{
    			operation[op_index] = *(expStr+i);
    			op_index++;
    			continue;
    		}
    	}
    	/*
    	假设符号数组中有n个符号。则数字数组中一定有n+1个数字,
    	而且假设一个符号在符号数组中的索引为i。
    	则该符号相应的第二个操作数一定在数字数组中的第i+1个位置。
    	*/
    	for(i=0; i<op_index; i++)
    	{		
    		if(operation[i] == '+')
    		{
    			number[0] += number[i+1];
    			continue;
    
    		}
    		else
    		{
    			number[0] -= number[i+1];
    			continue;
    		}
    	}
    	return number[0];
    }

    几组測试用比例如以下:




  • 相关阅读:
    springboot之scheduled任务调度
    nginx部署与安装
    hive 导出如数为csv格式
    hive函数应用之操作json
    解决Azure 消息队列ServiceBus提示证书不信任无权限的问题
    读书笔记--《不能承受的生命之轻》读后感
    localhost和127.0.01 区别
    C# 利用反射动态加载dll
    .NET MVC 简单的插件式开发
    爬虫发起抓取被服务器拒绝访问返回403禁止访问解决方案
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5076538.html
Copyright © 2011-2022 走看看