故我


私信TA

用户名:uq_37592642929

访问量:2985

签 名:

一起去啊,更远方的地方!!!!

等  级
排  名 706
经  验 3910
参赛次数 0
文章发表 53
年  龄 0
在职情况 学生
学  校 社会大学
专  业

  自我简介:

解题思路:

注意事项:    要用double型不然幂运算不了!!!!

参考代码:

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

struct s{

    int num[1000];

    int top;

};

void clear(struct s *stack){  //初始化栈

    stack->top=-1;

}

double pop(struct s *stack){   //数字出栈

    double t;

    t=stack->num[stack->top];

    stack->top--;

    return t;

}

void push (struct s *stack,double n){  //数字入栈

    stack->top++;

    stack->num[stack->top]=n;

}

double  compute(char c,double a,double b){  //进行符号计算

    double s=0;

    switch (c){

        case '+':s=a+b;break;

        case '-':s=a-b;break;

        case '*':s=a*b;break;

        case '/':s=a/b;break;

        case '^':s=pow(a,b);break;

    }

    return s;

}

int main (){

    struct s *stack;

    stack=(struct s *)malloc(sizeof(struct s));

    char a[1000];

    gets(a);

    double s=0;

    clear(stack);

    for (int i=0;a[i]!='\0';i++){

        if (a[i]=='@'){ 

            break;

        }else if (a[i]>='0'&&a[i]<='9'){     //数字字符转换成数字

            s=s*10+(a[i]-'0');

            continue;

        }else if (a[i]=='+'||a[i]=='-'||a[i]=='*'||a[i]=='/'||a[i]=='^'){

            double t;

            t=compute(a[i],pop(stack),pop(stack));  //数字栈中弹出两个进行计算,并入栈

            push(stack,t);

        }else{       //就是遇到空格了,将转换好的数字s,压入数字栈,将s初始化

            push(stack,s);

            s=0;

        }

    }

    printf ("%.0lf",pop(stack));   //最终唯一的结果,就在数字栈中,弹出输出即可!!!

}




 

0.0分

0 人评分

  评论区

  • «
  • »