XCOJ: 计算器
Posted William_xh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XCOJ: 计算器相关的知识,希望对你有一定的参考价值。
题目地址:http://xcacm.hfut.edu.cn/problem.php?id=1251
就和表达式求值有点像,但是和杭电的哪一题不一样的是中间没有空格,那么就意味着必须通过字符串处理的方式来解决这个问题。
(OS:mmp 劳资测试了快一整天才得出这个结论,因为用cin的话它是一次性读取的,你再cin除非是你再次输入或者中间有空格,杭电的那个计算器就是通过空格实现的);
再OS:当年考试这题还一直以为要用堆栈做,其实这么看来并不需要。
首先是字符串转化数字,这个很简单。
其次是第一个数要单独处理。
然后就是,每当str[i]为减号或者加号的时候,我就把符号后面的那个数给提取出来,这个可以用一个循环实现。
接下来附上代码
#include <iostream> #include<math.h> #include <iomanip> #include<cstdio> #include<string> #include<map> #include<vector> #include<list> #include<algorithm> #include<stdlib.h> #include<iterator> #include<sstream> #include<string.h> #include<stdio.h> using namespace std; //1250 int main() { string str; int len;//字符串长度 int sum;//总和 int temp;//临时数 int pos; int num[100]; while(cin>>str) { len=str.length(); memset(num,0,sizeof(num)); sum=0; temp=0; pos=0; for(int i=0;i<len;i++)//第一个数要单独处理 { if(pos==0) { for(int k=0;k<len;k++) { if(str[k]>=‘0‘&&str[k]<=‘9‘) { temp=temp*10+str[k]-‘0‘; } else{ break; } } num[pos]=temp; temp=0; pos++; } if(str[i]==‘+‘)//一旦遇到符号 就把它后面那个数给提取出来 { for(int j=i+1;j<len;j++)//通过循环实现 { if(str[j]>=‘0‘&&str[j]<=‘9‘) { temp=temp*10+str[j]-‘0‘; } else{//如果遇到了符号 或者是 最后一个数 break;//就跳出循环 } } num[pos]=temp; temp=0; pos++; } if(str[i]==‘-‘) { for(int jj=i+1;jj<len;jj++) { if(str[jj]>=‘0‘&&str[jj]<=‘9‘) { temp=temp*10+str[jj]-‘0‘; } else{ break; } } num[pos]=-temp;//当然 是减号的话 当然是放复数了 temp=0; pos++; } } for(int ii=0;ii<pos;ii++) { sum=sum+num[ii]; } cout<<sum<<endl; } return 0; }
以上是关于XCOJ: 计算器的主要内容,如果未能解决你的问题,请参考以下文章
Vue3官网-高级指南(十七)响应式计算`computed`和侦听`watchEffect`(onTrackonTriggeronInvalidate副作用的刷新时机`watch` pre)(代码片段