Description
统计1~n所有数字的英文表示的字符个数
Input
第一行一整数T表示用例组数,每组用例输入一整数n(1<=n<=1000)
Output
对于每组用例,输出1~n所有数字的英文表示的字符个数
Sample Input
3
1
2
3
Sample Output
3
6
11
Solution
简单题
Code
#include<cstdio>
#include<cstring>
using namespace std;
#define maxn 1111
char c1[21][11]={"zero","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen","twenty"};
char c2[10][10]={"twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"};
int a[21],b[10],num[maxn],sum[maxn];
int T,n;
int main()
{
a[0]=0;
for(int i=1;i<=20;i++)a[i]=strlen(c1[i]);
for(int i=2;i<10;i++)b[i]=strlen(c2[i-2]);
for(int i=0;i<1000;i++)
{
int t1=i/100,t2=i%100,t3;
num[i]=0;
if(t1!=0)
{
num[i]+=a[t1]+7;
if(t2)num[i]+=3;
}
if(t2<=20)num[i]+=a[t2];
else
{
t3=t2%10,t2/=10;
num[i]+=b[t2]+a[t3];
}
}
num[1000]=11;
sum[0]=num[0];
for(int i=1;i<=1000;i++)sum[i]=sum[i-1]+num[i];
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
printf("%d\n",sum[n]);
}
return 0;
}