POJ2121 Inglish-Number Translator
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
using namespace std;
map<string, int> mapTable;
void initMapTable()
{
mapTable["zero"] = 0;
mapTable["one"] = 1;
mapTable["two"] = 2;
mapTable["three"] = 3;
mapTable["four"] = 4;
mapTable["five"] = 5;
mapTable["six"] = 6;
mapTable["seven"] = 7;
mapTable["eight"] = 8;
mapTable["nine"] = 9;
mapTable["ten"] = 10;
mapTable["eleven"] = 11;
mapTable["twelve"] = 12;
mapTable["thirteen"] = 13;
mapTable["fourteen"] = 14;
mapTable["fifteen"] = 15;
mapTable["sixteen"] = 16;
mapTable["seventeen"] = 17;
mapTable["eighteen"] = 18;
mapTable["nineteen"] = 19;
mapTable["twenty"] = 20;
mapTable["thirty"] = 30;
mapTable["forty"] = 40;
mapTable["fifty"] = 50;
mapTable["sixty"] = 60;
mapTable["seventy"] = 70;
mapTable["eighty"] = 80;
mapTable["hundred"] = 100;
mapTable["thousand"] = 1000;
mapTable["million"] = 1000000;
}
void solve(string& str)
{
string::size_type pos = str.find_first_of(' ');
if (pos == string::npos)
{//只有一个单词
if (str == "negative")
{
cout << "-0" << endl;
}
else if (mapTable.find(str) != mapTable.end())
{
cout << mapTable[str] << endl;
}
}
else
{//至少个单词
string input = str;
int sum = 0,msum = 0,tsum = 0,hsum = 0;
bool bMinus = false;
int count = 0;
string::iterator start = input.begin();
string::iterator end = input.end();
do
{
string word;
end = find(start,input.end(),' ');//找到分隔符
copy(start,end,back_inserter(word));
++count;//单词计数
if (word == "negative")
{
bMinus = true;
}
else
{
if (count == 2 && word == "zero")
{
bMinus = false;
}
int curNum = mapTable[word];
if (curNum == 100)
{
hsum = sum * 100;
sum = 0;
}
else if (curNum == 1000)
{
tsum = (hsum + sum) * 1000;
hsum = 0;
sum = 0;
}
else if (curNum == 1000000)
{
msum = (tsum + hsum + sum) * 1000000;
tsum = 0;
hsum = 0;
sum = 0;
}
else
{
sum += curNum;
}
}
if (end == input.end())
{
if (bMinus)
cout << "-";
cout << msum +tsum + hsum + sum << endl;
break;
}
start = ++end;
} while (end != input.end());
}
}
int main()
{
string str;
initMapTable();
while(getline(cin,str))
{
if (str.length() == 0 || str.length() == 1)
continue;
solve(str);
}
return 0;
}
#include <string>
#include <map>
#include <algorithm>
using namespace std;
map<string, int> mapTable;
void initMapTable()
{
mapTable["zero"] = 0;
mapTable["one"] = 1;
mapTable["two"] = 2;
mapTable["three"] = 3;
mapTable["four"] = 4;
mapTable["five"] = 5;
mapTable["six"] = 6;
mapTable["seven"] = 7;
mapTable["eight"] = 8;
mapTable["nine"] = 9;
mapTable["ten"] = 10;
mapTable["eleven"] = 11;
mapTable["twelve"] = 12;
mapTable["thirteen"] = 13;
mapTable["fourteen"] = 14;
mapTable["fifteen"] = 15;
mapTable["sixteen"] = 16;
mapTable["seventeen"] = 17;
mapTable["eighteen"] = 18;
mapTable["nineteen"] = 19;
mapTable["twenty"] = 20;
mapTable["thirty"] = 30;
mapTable["forty"] = 40;
mapTable["fifty"] = 50;
mapTable["sixty"] = 60;
mapTable["seventy"] = 70;
mapTable["eighty"] = 80;
mapTable["hundred"] = 100;
mapTable["thousand"] = 1000;
mapTable["million"] = 1000000;
}
void solve(string& str)
{
string::size_type pos = str.find_first_of(' ');
if (pos == string::npos)
{//只有一个单词
if (str == "negative")
{
cout << "-0" << endl;
}
else if (mapTable.find(str) != mapTable.end())
{
cout << mapTable[str] << endl;
}
}
else
{//至少个单词
string input = str;
int sum = 0,msum = 0,tsum = 0,hsum = 0;
bool bMinus = false;
int count = 0;
string::iterator start = input.begin();
string::iterator end = input.end();
do
{
string word;
end = find(start,input.end(),' ');//找到分隔符
copy(start,end,back_inserter(word));
++count;//单词计数
if (word == "negative")
{
bMinus = true;
}
else
{
if (count == 2 && word == "zero")
{
bMinus = false;
}
int curNum = mapTable[word];
if (curNum == 100)
{
hsum = sum * 100;
sum = 0;
}
else if (curNum == 1000)
{
tsum = (hsum + sum) * 1000;
hsum = 0;
sum = 0;
}
else if (curNum == 1000000)
{
msum = (tsum + hsum + sum) * 1000000;
tsum = 0;
hsum = 0;
sum = 0;
}
else
{
sum += curNum;
}
}
if (end == input.end())
{
if (bMinus)
cout << "-";
cout << msum +tsum + hsum + sum << endl;
break;
}
start = ++end;
} while (end != input.end());
}
}
int main()
{
string str;
initMapTable();
while(getline(cin,str))
{
if (str.length() == 0 || str.length() == 1)
continue;
solve(str);
}
return 0;
}
作者:洞庭散人
出处:http://phinecos.cnblogs.com/
本博客遵从Creative Commons Attribution 3.0 License,若用于非商业目的,您可以自由转载,但请保留原作者信息和文章链接URL。
分类:
ACM
posted on 2009-09-12 21:43 Phinecos(洞庭散人) 阅读(1148) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
2007-09-12 文本传输搞定了
2006-09-12 数据结构复习笔记(3)