实验都是大模拟之数字转换为英文:这个题本来想直接打表到999的,可是作为一个单身狗,哪里敢想999啊。。
英文是以三位数来读的,所以写一个函数来表示每三位数的读法,加上单位就行了,不过我还学到了英文的数量单位:我只要1quadrillion就够了(生无可恋。。)
thousand
million
billion
quadrillion
quintillion
sextillion
septillion
octillion
nonillion
decillion
undecillion
duodecillion
tredecillion
quattuordecillion
quindecillion
exdecillion
septendecillion
octodecillion
novemdecillion
vigintillion
centillion
总之细心就能出的题,本来以为会有个pe啥的,毕竟括号没认真检查,没想到到一次过了,可能老师就放了一族样例吧:
附上ac代码:
/*
title:C++1/I
description:
author: averyboy
time:
version:
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<set>
#include<cctype>
#include<ctime>
#define INF 0x3f3f3f3f3
#define PI acos(-1.0)
using namespace std;
string Day[5]={" thousand "," million "," billion "," trillion "," quadrillion "};
string day[30]={"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"};
void trans(int n)
{
string s;
int p,q,r;
p=n/100;
q=n%100;
r=n%10;
if(p!=0)
{
s+=day[p-1]+" hundred"+' ';
}
if(q>=20)
{
s+=day[q/10+17]+' ';
if(r!=0)
s+=day[r-1];
else
s=s;
}
if(q==0)
s=s;
else if(q<20)
s+=day[q-1];
cout<<s;
return ;
}
int main()
{
long long n;
int cnt,num[10];
while(~scanf("%lld",&n))
{
cnt=0;
string s;
while(n>999)
{
num[cnt++]=n%1000;
n/=1000;
}
num[cnt]=n;
for(int i=cnt;i>=1;i--)
{
trans(num[i]);
if(num[i]!=0)
cout<<Day[i-1];
}
trans(num[0]);
cout<<endl;
}
return 0;
}