zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    Meterpreter核心命令
    bugku ctf 杂项 旋转跳跃 (熟悉的声音中貌似又隐藏着啥,key:syclovergeek)
    bugku 神秘的文件
    代码审计
    “百度杯”CTF比赛 九月场 类型:Web 题目名称:SQLi ---不需要逗号的注入技巧
    热烈祝贺北亚获批电子数据司法鉴定执业资格!
    硬盘有坏道的表现和避免硬盘坏道的方法
    如何应对eva存储崩溃的情况?
    linux系统数据恢复过程
    DELL EqualLogic PS6100恢复数据原理概述
  • 原文地址:https://www.cnblogs.com/William-xh/p/7491368.html
Copyright © 2011-2022 走看看