题解 | #学英语#
学英语
https://www.nowcoder.com/practice/1364723563ab43c99f3d38b5abef83bc
#include <stdio.h>
#include <string.h>
void ShowSinglePart(int num);
void GetInputAndShow();
int main() {
GetInputAndShow();
return 0;
}
//一些可能的输入和输出
//数字范围: [1, 2,000,000]
//22: twenty two
//100: one hundred
//145: one hundred and forty five
//1,234: one thousand two hundred and thirty four
//8,088: eight thousand (and) eighty eight (注:这个and可加可不加,这个题目我们选择不加)
//486,669: four hundred and eighty six thousand six hundred and sixty nine
//特点:
//Xbillion--Xmillion---Xthousand---X
//X代表1、2、3位数,如果有百位,中间要有and
//思路
//1. 将输入的数字,转换为字符串。
//2. 确定字符串的长度 范围如下[1,3]不加 [4,6]加thousand [7,9]加million [10,12]billion
//3. 将字符串从低分割成 3 个字符(数字)一组。每组先独立转换.
//4. 将上面的组合起来,例外:如果3个字符均为0,那么直接删去后缀。
//输入一个数字,输出一个字符串
char sdigit[][10] = {"zero","one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
//如果首位是1,且个位不是0
char cdigit_ten[][10] = {"zero", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
//如果首位不是1 或者 是1但个位是0
char cdigit[][10] = {"zero", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
char andstr[] ="and";
char hundredstr[] = "hundred";
char thstr[] = "thousand";
char mlnstr[] = "million";
char blnstr[] = "billion";
void ShowSinglePart(int num)
{
char buf[100] = {0};
char *p = buf;
//将百位、十位、个位分别得到
char bai = 0;
char shi = 0;
char ge = 0;
ge = num%10;
shi = (num/10)%10;
bai = num/100;
if(bai != 0)//百位的处理
{
strcat(buf,sdigit[bai]);
strcat(buf, " ");
strcat(buf, hundredstr);
if(shi!=0 || ge!=0)
{
strcat(buf, " ");
strcat(buf, andstr);
strcat(buf, " ");
}
}
if(shi!=0)//十位的处理
{
if(shi!=1)
{
strcat(buf, cdigit[shi]);
if(ge!=0)strcat(buf, " ");
}
else if((shi == 1) && (ge==0))
{
strcat(buf,cdigit[shi]);
if(ge!=0)strcat(buf, " ");
}
else
{
strcat(buf,cdigit_ten[ge]);
}
}
if((shi!=1)&&(ge!=0))//个位的处理
{
strcat(buf, sdigit[ge]);
}
printf("%s", buf);
}
void GetInputAndShow()
{
long temp = 0;
int blnpart = 0;
int mlnpart = 0;
int thpart = 0;
int finalpart = 0;
scanf("%ld", &temp);
//求出各部分值
blnpart =temp/1000000000;
mlnpart = temp%1000000000/1000000;
thpart = temp%1000000/1000;
finalpart = temp%1000;
int fourpart[4] = {blnpart, mlnpart, thpart, finalpart};
char foursufix[4][10] = {"billion", "million", "thousand", ""};
for(int i=0; i<4; i++)
{
if(fourpart[i]!=0)
{
ShowSinglePart(fourpart[i]);
printf(" %s ", foursufix[i]);
}
}
}
巨人网络成长空间 50人发布

查看9道真题和解析