賽碼網,簡單計算,用C語言自己實現的一個程序,僅供參考

									

簡單計算

題目描述

小賽所在的小組主要負責WEB應用的開發工作,這次他所在的小組正在開發一個WEB版的財務軟件。爲方便用戶使用,他

們打算爲用戶提供一個簡單計算功能,用戶輸入數學算式,就可以得到計算結果。其中涉及的計算包括:”+”、”-”、

”*”、”/”、”^”、”(”、”)”,分別表示加減乘除和指數,其中括號用於調整計算的順序。合法的表達式如下:

x+y+z

x+(y+z)

x*(y+z)+a-b-c^d

小賽對此不太精通,因此請你幫忙編寫這個程序。

輸入

輸入數據有多行,每行爲一個用戶輸入的算式,保證算式是合法的,每行最多包含不超過200個字符。所有參與運算的數值均爲整數,若爲指數,則爲正整數。

樣例輸入

1+2+3+4+5+6+7+8+9+10
1+2*3+4
1+2^(3+3)+5

輸出

對每個算式,在單獨的一行中輸出計算結果,結果請輸出整數。

樣例輸出

55

11

70


時間限制C/C++語言:1000MS其它語言:3000MS
內存限制C/C++語言:65536KB其它語言:589824KB

C語言程序實現如下:

#include <stdio.h>
#include <stdlib.h>

int compare(char a,char b)
//a爲當前的符號,b爲棧裏面的符號;
{
    if(a=='('||b=='('||(a=='^'&&b!='^')||((a=='*'||a=='/')&&(b=='+'||b=='-')))
        return 1;
    else
        return 0;
}
int cifang(int a,int b)
{
    int temp=1,i;
    for(i=0;i<b;i++)
    {
        temp=temp*a;
    }
    return temp;
}
int calculation(char c,int a,int b)
{
    int temp=0;
    switch(c){
        case '+':temp=a+b;break;
        case '-':temp=a-b;break;
        case '*':temp=a*b;break;
        case '/':temp=a/b;break;
        case '^':temp=cifang(a,b);break;
    }
    return temp;
}
int calculat(char a[])
{
    int temp=0;
    int number[50];
    char ch[50];
    int i=0,j1=0,j2=0;
    while(a[i]!='\0')
    {
        int flag=0;
        while(a[i]>='0'&&a[i]<='9'&&a[i]!='\0')
        {
            temp=temp*10+(a[i]-'0');
            i++;
            flag=1;
        }
        if(flag)
        {
            number[j1]=temp;
            temp=0;
            j1++;
        }
        if(a[i]!='\0')
        {
            if(j2==0)
            {
                ch[j2]=a[i];
                j2++;
            }
            else if(a[i]!=')')
            {
                if(compare(a[i],ch[j2-1])==0)
                {
                    number[j1-2]=calculation(ch[j2-1],number[j1-2],number[j1-1]);
                    j1=j1-1;
                    j2=j2-1;
                }
                ch[j2]=a[i];
                j2++;
            }
            else if(a[i]==')')
            {
                while(ch[j2-1]!='(')
                {
                    number[j1-2]=calculation(ch[j2-1],number[j1-2],number[j1-1]);
                    j1=j1-1;
                    j2=j2-1;
                }
                j2=j2-1;
            }

        i++;
        }

    }
    while((j2-1)>=0)
    {
        number[j1-2]=calculation(ch[j2-1],number[j1-2],number[j1-1]);
        j1=j1-1;
        j2=j2-1;
    }
    return number[j1-1];
}
int main()
{
    char a[200];
    int k1,k2;
    while(gets(a))
    {
        if(a[0]!='\0')
        printf("%d\n",calculat(a));
    }
    return 0;
}

以上代碼可能存在一些冗餘的部分,沒有進行修改,如果需要可以自行拷貝和修改。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章