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: 表达式字符串。
    【输出】 无
    【返回】 计算结果

    • 演示样例 
    1) 输入:char *expStr = “1+4*5-8/3”
    函数返回:19
    2) 输入:char *expStr = “8/3*3”
    函数返回:6 

    C代码例如以下:

    1. #include<stdio.h>  
    2. #include<stdlib.h>  
    3. #include<string.h>  
    4. #include<ctype.h>//包括isdigit函数  
    5.   
    6. #define MAX 100  
    7.   
    8. int calculate(int len, char* expStr);  
    9.   
    10. int main()  
    11. {  
    12.     char *str = (char*)malloc(2*MAX*sizeof(char));  
    13.     int len;  
    14.     printf("please input the expr:");  
    15.     gets(str);   
    16.     len = strlen(str);  
    17.     printf("after calculation, the result is: %d ", calculate(len,str));  
    18.     return 0;  
    19. }  
    20.   
    21. int calculate(int len, char* expStr)  
    22. {  
    23.     char operation[MAX];  
    24.     int number[MAX];  
    25.     int op_index = 0;  
    26.     int num_index = 0;  
    27.     int i;  
    28.     for(i=0; i<len; i++)  
    29.     {  
    30.         if(isdigit(*(expStr+i)))//假设是数字,则进入数字数组  
    31.         {  
    32.             number[num_index] = *(expStr+i) - '0';  
    33.             num_index++;  
    34.             continue;  
    35.   
    36.         }  
    37.         if(*(expStr+i) == '*')//假设是乘法,能够先计算出其左右两数之乘积  
    38.         {  
    39.             number[num_index-1] *= (*(expStr+i+1)-'0');  
    40.             i++;//由于已经将乘号右边的数取出来了  
    41.             continue;  
    42.         }  
    43.         if(*(expStr+i) == '/')//假设是除法,能够先计算其左右两数之商  
    44.         {  
    45.             if(*(expStr+i+1) == '0')  
    46.             {  
    47.                 printf("Error: 0 can not be the divisor! ");  
    48.                 exit(1);  
    49.             }  
    50.             else  
    51.             {  
    52.                 number[num_index-1] /= (*(expStr+i+1)-'0');  
    53.                 i++;//由于已经将除号右边的数取出来了  
    54.                 continue;  
    55.             }  
    56.         }  
    57.         if(*(expStr+i) == '+' || *(expStr+i) == '-')//对于加减法,则须要进入符号数组  
    58.         {  
    59.             operation[op_index] = *(expStr+i);  
    60.             op_index++;  
    61.             continue;  
    62.         }  
    63.     }  
    64.     /* 
    65.     假设符号数组中有n个符号,则数字数组中一定有n+1个数字, 
    66.     而且假设一个符号在符号数组中的索引为i, 
    67.     则该符号相应的第二个操作数一定在数字数组中的第i+1个位置。 
    68.     */  
    69.     for(i=0; i<op_index; i++)  
    70.     {         
    71.         if(operation[i] == '+')  
    72.         {  
    73.             number[0] += number[i+1];  
    74.             continue;  
    75.   
    76.         }  
    77.         else  
    78.         {  
    79.             number[0] -= number[i+1];  
    80.             continue;  
    81.         }  
    82.     }  
    83.     return number[0];  
    84. }  

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    go学习中的零散笔记
    git reset --hard与git reset --soft的区别
    php必学必会
    gdb 解core
    php学习
    高仿京东到家APP引导页炫酷动画效果
    RxHttp
    SVN回滚文件
    遍历枚举
    python3 多线程
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4814225.html
Copyright © 2011-2022 走看看