范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

NOIP信奥赛算法之加减算式

  昨天晚上儿子说要考考我,让我做一道题,输入是一行一句只有加减运算的算式,譬如1+5-7,让我写一个程序来计算出结果。
  C++里没有原生支持以字符串形式导入一个表达式,并直接计算出结果的能力,可能有一些第三方的库支持。正常做法,如果表达式里有加减乘除四则运算,还有小括号来强制指定优先级,则先把表达式转换成逆波兰表达式,再计算之。未来我会给出具体解法,难度属于"普及+/提高-"。
  而这一题,只有加减两种运算,那就只能算入门难度了。因为加减运算的优先级相同,都按从左至右的结合律依次两两计算。
  表达式中有数字,有+和-两种运算符,混合在了一起,显然,用string类型来保存整个表达式最方便。
  表达式可能会非常长,譬如下面是一个例子:
  每个数字可能都不止一位,因此,要用一个int类型的变量来逐位提取每个参与运算的数字。
  自从2021年9月后,C++14新特性终于可以用于NOIP了,语法糖(syntactic sugar,是指编程语言中可以更容易表达一个操作的语法,它可以使程序员更加容易去使用这门语言,操作可以变得更加清晰、方便,或者更加符合程序员的编程习惯)又有增加,对于一个字符串,可以用以下方式来遍历字符串s:
  而在这之前,只能用下面的语句来遍历:
  而且这种用法还会触发编译器告警,因为如果i为int类型,i的最大上限值是2,147,483,648,如果字符串的长度超过这个值,多余的部分就无法遍历到,正确的写法如下:
  这种写法更为冗长,好在有了C++14,不用再那么麻烦了。
  除了以上三种之外,还有第四种遍历string的方法,一起来看一下:
  以上这种是采用迭代器iterator遍历string的方法。
  第一种方法最简洁,但是也有缺陷,譬如无法从右往左遍历字符串,也无法在一次循环中同时获得字符串的多个字符。所以其它几种方法也并不能被方法一完全取代。在某些场合还是得使用如上这些看起来比较复杂的遍历方法。
  在循环体内,需要对string中的每一个元素做判断,如果是数字,一种处理方式,否则,就是+或者-,那就是另外一种处理方式。程序结构如下:
  在处理字符串中的数字之前,首先要搞清一件事, 形如"12345"和12345,在计算机内是完全不同的两种值,前者是一串字符串,并不能进行数学运算,只能打印出来。而后者是真实的数字,可进行数学运算。同样,字符"3"和数字3也完全是两码事。在C++里,字符串用双引号括起来,字符用单引号括起来。
  表达式中夹杂着数字和+和-的运算符。我们只能把表达式当作一串字符来处理。因此我们要想个办法,把表达式中的数字字符串,譬如"12345"转变成12345,好让它进行数学运算。
  我用前面的方案一,把表达式字符串s中的每一个字符依次放入字符变量ch里。如果ch连续的得到数字字符,则需要把它们合并成一个int类型的整数,方法是用一个初始值为0的变量,不断的乘以10,再加上这个数字。譬如字符串"123",从左往右,先把1拿出来,放在某个变量num中,然后乘以10再加上2,得到12放入num中,然后把num再乘以10得到120再加上3,就得到了123。
  由于ch虽然看上去是数字,其实本质是一个char类型的字符,要通过减去字符"0",得到一个真正的数字。字符0~9在ASCII表中是连续排列的,如果我们得到或者保存一个字符"3",其实它在计算机内真正的值是十进制的51,是该字符的ASCII码值。显然我们不能用51去直接运算。那怎么让51变成数字3呢?只要让它减去"0"的ASCII码值即可。"0"的ASCII码值为十进制48, "3" - "0" = 51 - 48 = 3。这就完成了从"3"到3的转换。
  因此对于一连串的数字形式的字符,要转成int类型的整数,可用如下的方式:
  接下来,该处理运算符了,如果变量ch遇到一个运算符,该怎么处理?首先,我们可以意识到,遇到运算符就意味着变量num的数字合并工作暂时告一段落,变量num中的数字可以参于运算了,可以用来和上一次运算的结果进行+或者-的运算。那到底是+还是-呢?这可不是由当前的ch中的运算符来决定的,而是由上一次得到的运算符来决定的。因此,要有一个变量,来保存上一次的运算符。给它取个名字叫last_op吧,给其一个初始值+。并用另一个变量ans来保存上一次运算的结果,给一个初始值0。
  试想,当遇到表达式中第一个运算符的时候(无论它是+还是-),num中保存的数字立即就会与初始值为0的ans做+的操作,并把结果保存在ans里。这就是我们想要的结果。等运算完成,last_op的使命完成,我们就可以把当前ch中保存的运算符,放入last_op中,用于下一次的计算。同时,还要把num置为0,因为num的当前计算已经完成,它要变成0,以迎接下一批连续的数字。代码可扩展如下:
  我们快完成了,但这样的程序还是不太正确,试想一下,所有的表达式是以数字结尾的,并非以+或者-结尾。譬如表达式1 - 3 + 5, 最后,有一个数字5,最后不可能是一个+或者一个-。 而我们的任意一次计算,都是在遇到运算符+或者-时,才进行的。那最后那个数字,保存在num里的最后的数字,似乎是没有机会运行的,因为循环已经结束,它将被悲惨的丢弃掉。解决的办法也比较巧妙,当我们通过命令行得到整个表达式,在开始做计算之前,我们人为在表达式最后添加一个运算符,随便添加一个+或者-,都可以。这个运算符不会参于运算,只是为了让它左侧的那个数字,不被丢弃。
  整个程序的完整代码如下:
  这道题在洛谷上有,编号是P2788,感兴趣的同学可以去尝试一下。
  到这里,这题就做完了。儿子看完后大笑着说,"完全没有必要那么麻烦,看我的",然后他给出了如下的代码:
  这段只有11行的代码,利用了C++中cin语句的一个特性,当输入譬如为1+5-3时,如果用一个整数(int)类型的变量通过循环语句连续不断的去接收它,这个变量会先得到1, 再得到+5, 再得到-3,它会把+号和-号当作该数字的符号位,而不是运算符。如果把得到的这些数字加起来, 就有1 + (+5) + (-3)。其实结果与1+5-3并无不同,因此代码就可以简单到爆了。

手机即将过时头条创作挑战赛手机即将过时手机已经过时了吗?这个问题恐怕不是我说的,而是所有人都想知道的。如果你已经开始使用一款智能手机,并且想在不久的将来更换成智能手机,你会怎么做?你是否愿意为又一款中端神U,天玑8200即将发布,K60预定?丨梵高星月夜手机联发科将于8号的发布会上发布天玑9200天玑8200处理器,今年天玑8100的口碑相当不错,虽然极限性能差一些,但是能效表现很优秀,对于非重度游戏用户来说,这颗芯片日常体验比天玑922场15球4助攻!国安25岁土炮大爆发,成功荣升射手榜第三名众所周知中超联赛里的大部分俱乐部对于外援的依赖程度是非常之高的,这也导致了场上许多重要位置上都是被外援占据的。尤其是锋线这个位置上基本都是被外援牢牢占据着,这也使得国内的前锋少有出百吃不厌的风琴土豆,又是饭又是菜,烤完端上桌,霸气又好吃秋日生活打卡季土豆真是好东西,既可入菜,又可当饭。就如今天这道风琴土豆,就是饭菜一体的美食。土豆,学名马铃薯,又叫洋芋地瓜等,不管叫什么,也不管什么品种,都富含淀粉蛋白质氨基酸多种(新华全媒)新能源车企在进博绿色低碳各展神通在上海举行的第五届进博会上,汽车展区聚焦减碳和环保主题,参展企业纷纷带来出行领域的绿色方案。11月6日在第五届进博会汽车展区拍摄的本田纯电动概念车。新华社记者金立旺摄11月6日在第NatureReviewsEarthampampampEnvironment五彩斑斓的碳基于全光谱对有机碳的性质和分布描述,可以将碳分为黑碳棕碳红碳蓝碳绿碳和蓝绿碳。这一基于颜色的术语有助于我们对碳循环的理解,它超越了传统的宽泛的碳类型分类(通常是简单的无机碳和有机碳索尼Xperia1V或将配备一英寸主摄并有望用上更高规格的扬声器在夏普和小米等安卓手机厂商推出一英寸大底主摄的智能手机后,许多友商也磨刀霍霍准备在下一代旗舰手机上用上一英寸主摄,这对于索尼手机来说构成了不小的挑战,最近有消息表示,索尼的下一代安论货架式电商的优势民宿平台做成交今年双十一最大的看点就是主播格局的变化,各大平台主播流动,从抖音到淘宝,从淘宝到抖音兴趣电商是冲动消费,但理性和刚需才是长久发展之计,而货架电商生命力之顽强,符合当下用户行为。本文跨境电商客户服务指南(二)提供全渠道客户服务的6种方式关键词跨境电商,客户服务,全渠道客户服务互联网时代的客户倾向于使用多种渠道与跨境电商企业进行互动,但仅仅提供这些渠道已经不够了,整合所有渠道和接触点变得越来越重要,这样客户就可以在你看好Tiktokshop电商的发展吗?作为数据小编喜欢拿数据说话。那我们先来看看tiktok的发展历程吧。如果你真的想加入跨境电商做店主的话,这篇文章对你的帮助应该是很大的。自TIKTOK出现以来,就被不少网络企业关注MLED产业链洗牌京东方控股华灿海信视像增持乾照京东方(000725。SZ)11月6日晚公告透露,拟以不超过21亿元认购华灿光电(300323。SZ)定向增发的A股股份,成为其第一大股东,打通MLED(MiniMicroLED)
想要买电视的看看,应该能给你节省不少钱!少说也有23千最近很多人都在网上看各种攻略,为的就是想要买到一台好电视。想要双11买电视的人看看这篇内容,保准给你省下不少钱。激光电视别买激光电视就是激光光源的投影仪,但是换个名字就摇身一变,价卸任CEO疯狂套现,刘强东时代落幕该来的终究还是来了。刘强东告别京东,卖掉将近一半股份,昨天,京东突然传出消息,宣告了刘强东时代结束,刘强东转让了西安京东45的股份给京东的副总裁缪钦,还没等大家回过神来,刘强东干脆今日A股大涨62点,新的行情启动了吗?接下来的行情会这样走周五中午A股收盘!今天的A股,三大指数全面上涨,汽车及汽车板块大涨,个股超4000家上涨,涨停股票数达到56只,没有跌停板,股民的脸上终于露出开心的笑容,是新的行情启动了吗?接下来锂业双雄角力,谁是最后赢家?作者丨董鹏编辑丨巫燕玲图源丨图虫回顾今年锂盐行业,一季度的关键词是暴涨,二季度是冷静,三季度则是分化。以锂业双雄为例,2021年锂上涨前期,赣锋锂业净利润达到52亿元,天齐锂业则刚搭载20个车规级传感器小马智行发布第三代自动驾驶卡车系统出品丨搜狐汽车搜狐商用车近日,搜狐商用车从小马智行官方获悉,小马智行发布第三代自动驾驶卡车软硬件集成系统。该系统方案面向干线物流业务需求设计,已率先应用于小马智行与三一重卡合作打造古代宫女晚上伺候完主子,为什么还要去伺候太监?古代宫女也是人,他们也有七情六欲。宫女们都是白天伺候主子,这是他们的工作,到了晚上他们去伺候太监,是辛苦了一些,但这就是生活,哪有那么容易的。宫女白天伺候主子,晚上伺候太监,主要有纠缠谱猜想路径积分虫洞效应揭示纠缠谱与能谱的迷离关系一个好的猜想,值得一个漂亮的证明,和一些恰到好处的推广。从路径积分虫洞效应出发,我们的工作提供了理解好蛋大爷的纠缠谱猜想的一个好的思路,也孵出了额外的好蛋。撰文严正(香港大学物理系新蕾又推出一款续航超200公里的电动车,8级增程系统,能够跑长途头条创作挑战赛您在阅读前请点击上面的关注二字,后续会为您提供更多有价值的相关内容,感谢您的支持。早期的电动车主要竞争低价,随着人们收入的提升,依赖超低价格吸引消费者已经不是主流大品广深莞等8城已进行北斗车道级导航试点在4日举行的新闻发布会上,中国卫星导航系统管理办公室主任北斗卫星导航系统新闻发言人冉承其介绍,目前北斗系统已为230多个国家和地区超过15亿用户提供了北斗加速定位和北斗高精度服务,被误解的盖世英雄项羽王道与霸业秦一统天下后,世人多以为,天下一统才是王道,分封诸王只是霸业。舍王道选霸业的项羽,被误认为目光短浅。其实项羽所选霸业,与春秋五霸不同。春秋五霸虽为霸主,名义上仍在尊奉周天读史增智资治通鉴之汉纪十九(45)原文乌孙狂王复尚楚主解忧,生一男鸱靡,不与主和,又暴恶失众。汉使卫司马魏和意副侯任昌至乌孙。公主言狂王为乌孙所患苦,易诛也。遂谋置酒,使士拔剑击之。剑旁下,狂王伤,上马驰去。其子细