题解:UVA486 English-Number Translator

这是一道模拟题。

前置知识

数级

思路

  • 当读取到了 thousandmillion 时,计数器要乘上对应的值并累加到最终答案里,并且把计数器归零(因为该数级已经计算完了)。
  • 当读取到 hundred 时,只要计数器乘上 \(100\)
  • 否则如果是其他数,则直接累加到计数器即可。

AC code

#include<bits/stdc++.h>
using namespace std;
string s,k;
string addnumber[30]={"zero","one","two","three","four","five","six","seven","eight","nine","ten",
"eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen",
"twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"};
int add[30]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,30,40,50,60,70,80,90};
int ans,sum;
int main(){
	while(getline(cin,s)){
		k="";
		int len=s.size();
		for(int i=len-1;i>0;i--){ //去行尾空格。不加会有玄学错误。
			if(s[i]==' ') len--;
			else break;
		}
		for(int i=0;i<len;i++){
			if(s[i]!=' '&&i!=len-1){
				k+=s[i];
				continue;
			}
			if(i==len-1) k+=s[i];
			if(k=="negative") cout<<'-';
			for(int j=0;j<30;j++){
				if(k==addnumber[j]){
					sum+=add[j];
					break;
					}
			}
			if(k=="hundred") sum*=100;
			if(k=="thousand") {
				sum*=1000;
				ans+=sum;
				sum=0;
			}
			if(k=="million"){
				sum*=1000000;
				ans+=sum;
				sum=0;
			}
			k="";
		}
		ans+=sum; //最后还要把剩下的数(个级)加上,不然像 114514 会输出成 110000。
		cout<<ans<<endl;
		sum=0,ans=0;
	}
	return 0;
}
posted @ 2024-08-20 17:50  Laoda_Bryant  阅读(1)  评论(0编辑  收藏  举报