題目連接:https://www.luogu.org/problem/P1981html
給定一個只包含加法和乘法的算術表達式,請你編程計算表達式的值。ios
一行,爲須要你計算的表達式,表達式中只包含數字、加法運算符「+」和乘法運算符「×」,且沒有括號,全部參與運算的數字均爲 0 到 2^31-1 之間的整數。c++
輸入數據保證這一行只有0-9、+、×這 12種字符。編程
一個整數,表示這個表達式的值。ide
注意:當答案長度多於 4 位時,請只輸出最後4 位,前導0 不輸出。spa
輸入 #1
1+1*3+4
輸出 #1
8
輸入 #2
1+1234567890*1
輸出 #2
7891
輸入 #3
1+1000000003*1
輸出 #3
43d
說明
對於30%的數據,0≤表達式中加法運算符和乘法運算符的總數≤100;
對於80%的數據,0≤表達式中加法運算符和乘法運算符的總數≤1000;
對於100%的數據,0≤表達式中加法運算符和乘法運算符的總數≤100000。code
分析htm
每一個運算數都不超過int的表示範圍,能夠直接輸入。blog
至於拆分運算數和運算符,本來我還擔憂直接輸入沒法自動拆分,其實沒有問題。參見以下代碼:(參考出處http://www.javashuo.com/article/p-zjuhedyf-ha.html)
1 #include<iostream> 2 #include<stdio.h> 3 using namespace std; 4 const int mod=1e4; 5 6 int x,y,k,ans=0; 7 char fu; 8 9 int main() 10 { 11 12 scanf("%d",&x); 13 x=x%mod; 14 while(scanf("%c",&fu)!=EOF) 15 { 16 if(fu=='\n') break; 17 scanf("%d",&y); 18 y=y%mod; 19 if(fu=='+') 20 { 21 ans=(ans%mod+x%mod)%mod; 22 x=y; 23 } 24 else if(fu=='*') 25 { 26 x=x%mod*y%mod; 27 } 28 } 29 ans=(ans%mod+x%mod)%mod; 30 printf("%d",ans); 31 return 0; 32 }
原文代碼:
1 #include<bits/stdc++.h> 2 3 using namespace std; 4 5 const int mod=1e4; 6 7 int x,y,k,ans=0; 8 char fu; 9 10 int main() 11 { 12 cin>>x; 13 x=x%mod; 14 while(cin>>fu) 15 { 16 if(fu=='\n') break; 17 cin>>y; 18 y=y%mod; 19 if(fu=='+') 20 { 21 ans=(ans%mod+x%mod)%mod; 22 x=y; 23 } 24 25 if(fu=='*') 26 { 27 x=x%mod*y%mod; 28 } 29 30 } 31 32 ans=(ans%mod+x%mod)%mod; 33 34 printf("%d",ans); 35 36 return 0; 37 }
其實本文能夠參考一下這兩篇文章的處理方式:(僅作借鑑)