• 字符串-POJ/UVA 486-English-Number Translator(英语数字转换器)


  • 题目链接:5:英语数字转换器

  • 思路:

有中文题目不讲大意

这道题会卡人的就是奇葩的英语表示数字大小,外国million下来直接就thousand,所以会出现million和thousand之间隔着个--nine hundred ninty nine ,其实无非就三种情况需要考虑这个问题,遇到million,thousand,hundred,需要回头计算乘上这些表示它们个数的数字,而且也容易发现,thousand 前面的倍数肯定不会比它自己大(因为再大就百万了),hundred也类似

所以取余是一个好东西,只要遇到 million,thousand,hundred 就对前面的计算结果取余,然后前面的结果减掉这部分余数,再加上 million,thousand,hundred乘上这个余数的值

英文数字用多个map储存

我是用多个map,为了表示出优先级,位数越大优先级越高,便于转换

  • 代码:

#include<iostream>
#include<sstream>
#include<string>
#include<map>
#include<queue>
using namespace std;string P1[] = { "zero","one","two","three","four","five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen","fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
string P2[] = { "ten","twenty", "thirty", "forty", "fifty","sixty", "seventy", "eighty", "ninety" };
string P3[] = { "hundred", "thousand", "million" };
string Wait_Op_num;
int Mod[] = { 100,100, 10,1000,1000000};
map<string,int> Num_Set[5];void Pre_Op()   //构建map
{for (int i = 0; i < 20; i++)Num_Set[0].insert(pair<string, int>(P1[i], i));for (int i = 1; i < 9; i++)Num_Set[1].insert(pair<string, int>(P2[i], 10 * (i + 1)));Num_Set[2].insert(pair<string, int>(P3[0], 100));Num_Set[3].insert(pair<string, int>(P3[1], 1000));Num_Set[4].insert(pair<string, int>(P3[2], 1000000));}int main()
{Pre_Op();while (getline(cin, Wait_Op_num)){if (Wait_Op_num.empty())break;int Res = 0;int Privelige = -1;int Temp_Pre;int Negative_flag = 0;stringstream ss(Wait_Op_num);   //字符串流queue<string> Num;while (!ss.eof()){string temp_str;ss >> temp_str;//cout << temp_str << endl;Num.push(temp_str);   //单词入队列}ss.clear();while (!Num.empty()){int Check_Index = 0;int Number;if (Num.front() == "negative")   //负数标记{Num.pop();Negative_flag = 1;}string Front = Num.front();Num.pop();for (Check_Index = 0;; Check_Index++)   //对单词进行数值转换{auto it = Num_Set[Check_Index].find(Front);if (it!= Num_Set[Check_Index].end()){Number = it->second;break;}}if (Privelige == -1)   //优先级为-1,接触第一个数字{Res += Number;Privelige = Check_Index;}else if (Privelige > Check_Index)   //当前单词小于最大优先级{if (Check_Index >= 2)   //遇到 thousand hundred million{//one million twenty one thousand one hundred oneint Tail_num = Res % Mod[Check_Index];   //取余Res -= Tail_num;   //减去余数Res += Tail_num * Number;   /加上}elseRes += Number;   //如果是十位数,个位数 直接加上去}else if (Privelige < Check_Index)  //当前数优先级高{Res *= Number;Privelige = Check_Index;}//cout << Res << endl;}if (Negative_flag)Res *= -1;cout << Res << endl;}return 0;
}//negative nine hundred ninety nine million nine hundred ninety nine thousand nine hundred ninety nine

字符串-POJ/UVA 486-English-Number Translator(英语数字转换器)相关推荐

  1. criscriter英语测试软件,English test (英语测验)

    很多学生在STSs中告诉我,他们十分担心英语测验,问我应该如何准备.我为了使他们放心,就又说了一遍测验的范围,并强调我的教学法的好处. TEACHER'S Dear students, Some of ...

  2. 【整数转字符串】LeetCode 9. Palindrome Number

    LeetCode 9. Palindrome Number Solution1: 不利用字符串 class Solution { public:bool isPalindrome(int x) {if ...

  3. English:怎样辨别英语中 表语 宾语 定语 状语 等结构

    组成句子的各个部分叫句子成分.英语句子成分有主语,谓语,表语,宾语,宾语补足语,定语,状语等. 顺序一般是主语,谓语,宾语,宾语补足语,而表语,定语,状语的位置要根据情况而定. 1.主语 主语表示句子 ...

  4. 【English】十月英语总结

    月末,总结英语喽.这个月么怎么学习英语 十月英语总结 1 十月一我们一起学习了李阳音标 2 小组一起互相纠音 3 丽萍姐姐及何新生师哥给我们打鸡血 4 10.11 我.晓慧.恩君相约操场 1,刚开始自 ...

  5. 字符串训练 ----- UVA 10815题目Andy's First Dictionary

    解题思路: 本题主要是涉及分割获取单词  然后按字典排序输出单词 (这个只要用qsort排序下就好了) AC代码如下 #include <iostream> #include <st ...

  6. 【English】十二月英语总结

    这个月不同于之前的每一个月,这个月不是我自己在学,而是大家一起在学习. 前半个月,我们在学习李阳音标. 后半个月,我们在学习赖世雄音标. 这个月参加了两次lalon活动. 后半个月,恰恰赶上了一个节日 ...

  7. 【English】二月英语总结

    这个月是完完整整的全职生活,按理说应该是学的不错,其实,结果,并不是我所想要的,一直在纠结AJ这个材料,具体不知道怎么去学,问了好多小伙伴,每个人的学习方法真还不一样,自己一直迷茫着. 记得有一天晚上 ...

  8. 新概念英语第二册课文电子版_如何正确使用《新概念英语》(New Concept English)提高英语水平?...

    要记住:没有哪一本书,或哪一套教材,是你英语的"救世主". 换言之,如果你英语不好,不要指望读上一本书,学个什么教材,就能让英语到达一个多么高的层次. 英语的学习是长期积累的过程, ...

  9. 【English】一月英语

    今天是过年后上课的第一天,也是二月的第一天.是时候做个英语学习计划啦.自从在外上班,英语确实放松了好多.基本只有在公交上的洗耳朵,没有topic,没有精听,也没有目标......二月份,要找个小伙伴儿 ...

最新文章

  1. iOS UITextView 随键盘弹出界面上移
  2. 不可错过! CMU《高级自然语言处理》
  3. [转贴]现在在做一个WEB的站内消息系统,从工具栏位置弹出一徐徐上升的窗口...
  4. __asm__ __volatile__(: : :memory)
  5. 上海建桥学院计算机专业,上海建桥学院全国排名 特色专业多与计算机有关
  6. linux python命令无反应_Python学习第164课--Linux命令行特殊符号的意义及命令的语法规则...
  7. JDK源码解析之Java.util.Collections
  8. Z-Stack Home Developer's Guide—7.EZ-Mode中文翻译【Z-Stack Home 1.2.0的开发文档】
  9. java abstract类和abstract方法
  10. 【clickhouse】clickhouse表引擎之 kafka 表引擎 卡死
  11. LINUX SHELL中,变量如何加值
  12. TiledMap快捷键
  13. TSINSEE青犀视频/海康合作的RTMP推流安防摄像头的移动侦测功能介绍
  14. English Pod 听力学习之路 C69 - C75
  15. 《西游记》《封神榜》各路神仙基本层次图,不要再傻傻分不清楚了
  16. 微软造的还原精灵EWF(Enhanced Write Filter)
  17. 易基因|一文看懂:ChIP实验和qPCR定量分析怎么做
  18. 什么是TorchScript
  19. 关于MAC安装windows【支持老版本】 支持安装全系列windows
  20. Java json字符串转json对象

热门文章

  1. 【pacing 2】Paced算法:PacingController
  2. RTL8198D 编译出现sk_pacing_shift_update未定义
  3. python计算机二级含金量-大学生有必要去考取python二级证吗?
  4. Delphi语言的VCL框架
  5. android 百度地理围栏,地理围栏
  6. CAN总线终端电阻的作用( 120欧姆/0.25W)
  7. 基因数据处理121之SSW的score matrix调整,使得与SparkSW评分一致
  8. ArchSummit全球架构师峰会 重新定位架构师的价值
  9. zz:用MSBuild.... DailyBuild和软件开发流程的东东
  10. Matplotlib雷达图、三维饼状图