杭電acm—1237 簡單計算器
簡單計算器
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 21912 Accepted Submission(s): 7894
Problem Description 讀入一個只包含 +, -, *, / 的非負整數計算表示式,計算該表示式的值。
Input 測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用一個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果不要輸出。
Output 對每個測試用例輸出1行,即該表示式的值,精確到小數點後2位。
Sample Input 1 + 2 4 + 2 * 5 - 7 / 11 0
Sample Output 3.0013.36
本來以為要涉及大數的運算,後來寫了一個這個ac掉了,就是簡單的,先乘除,後加減。
AC的程式碼如下:若哪兒有不對或是什麼建議,請各位不吝指出!
#include<stdio.h> #include<string.h> int main(){ char str[205],str2[205]; int i,j,k,s,index,length,flag; double x,y,count[200],add; while(gets(str)!=NULL){ length=strlen(str); flag=0; for(i=0;i<length;i++){ if(str[i]==' '||str[i]=='0') flag++; } if(flag>=length) break; k=0; x=y=0; add=0; for(i=0;i<length;i++){//先計算乘和除 if(str[i]>='0'&&str[i]<='9'){ x=str[i]-'0'; for(j=i+1;j<length;j++){ if(str[j]==' ') break; else x=x*10+str[j]-'0'; } i=j; } if(str[i]=='+'||str[i]=='-'){//把加減的數和符號儲存起來 count[k]=x; str2[k++]=str[i]; } if(str[i]=='*'||str[i]=='/'){//計算乘除並用x儲存 if(str[i+2]>='0'&&str[i+2]<='9'){ y=str[i+2]-'0'; for(j=i+3;j<length;j++){ if(str[j]==' ') break; else y=y*10+str[j]-'0'; } if(str[i]=='*') x=x*y; else x=x*1.0/y; } i=j; } } count[k]=x; add=count[0]; for(i=0;i<k;i++){ if(str2[i]=='-') add-=count[i+1]; else add+=count[i+1]; } printf("%.2lf\n",add); } return 0; }
相關推薦
杭電acm—1237 簡單計算器
簡單計算器 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub
sincerit-杭電oj 1237 簡單計算器
1237 簡單計算器 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 26856 Accepted Submission(s): 9
杭電acm 1084 What Is Your Grade? 比較考人的簡單題
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring>
2017杭電ACM集訓隊單人排位賽 - 2 題解
需要 6.0 hdu2045 owb style 適應 freopen count 枚舉 1001,水題,直接模擬即可。比賽中開局連wa三發,因為把int寫成了bool.. 1002,積分題,比賽中找到了下面這個積分公式, 但是並沒什麽用,,因為帶入以後存在誤
HDU 1237 簡單計算器
math.h tle 小數 ems target tor getchar style pac 題目代號:HDU 1237 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1237 題目原文: 簡單計算器 Problem Desc
HDU-1237- 簡單計算器--棧的基本應用
++ 現在 amp hdu print 簡單 循環條件 har pop 簡單計算器 Problem Description 讀入一個只包含 +, -, *, / 的非負整數計算表達式,計算該表達式的值。 Input 測試輸入包含若幹測試用例,每個測試用例占一行,每行不超
杭電acm 1173
ace 學習 一個點 bsp esp != 所有 fin 數學 從1173這道題,我學習到了一個數學思想...... 假設所有的點都在一個直線上,要求一個點,到所有點的距離之和最短,那麽,把值最大的點和值最小的點連成一條直線,這條直線上的所有點到所有的點的距離之和相等且都是
杭電acm 1180 詭異的樓梯 BFS
script 朋友 mission emp temp ont pty content using 詭異的樓梯 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Other
杭電acm 1181 變形課 DFS
小寫 pty space ring 隊列 set amp ott panel 變形課 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Subm
杭電acm 1210 Eddy's 洗牌問題
input pro sample 就是 pre ble 通過 iss ont Eddy‘s 洗牌問題 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot
杭電acm 1230 火星a+b(進制)
進制數 a+b 第一個 進行 () 地球 iss class font 火星A+B Time Limit: 2000/1000 MS (Java/
杭電ACM hdu 2079 選課時間 (模板)
Problem Description 又到了選課的時間了,xhd看著選課表發呆,為了想讓下一學期好過點,他想知道學n個學分共有多少組合。你來幫幫他吧。(xhd認為一樣學分的課沒區別) Input輸入資料的第一行是一個數據T,表示有T組資料。每組資料的第一行是兩個整數n(1 <= n <
杭電acm 1231 最大連續子序列
 
杭電acm 1230 火星a+b(進位制)
 
杭電acm 1210 Eddy's 洗牌問題
Eddy's 洗牌問題 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5504 &n
杭電ACM-2075 A|B?
A|B? &nbs
杭電ACM-2071 Max Num
Max Num Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 29053
杭電ACM-1064 Financial Management
Financial Management &n
杭電ACM-2104 hide handkerchief
hide handkerchief &nb