1002 - 写出这个数
思路:由于n的大小必不可能使用int或long int来保存,所以需要用到字符串,以及需要中文输出就需要用到switch和case
第一步——求和
int n,num; //n用于输入,num用于累加
while((n = getchar()) != '\n')
{
num += n - '0'; //获取字符后,实际为ascll码需要减去0的ascll码
}
第二步——保存到字符串中
int count = 0; //字符串下标
char *str[100]; //为字符串指针初始化100的空间,类似于二维数组
while(n != 0)
{
int digit = n % 10; //取出个位
switch (digit)
{
case 0:
str[count] = "ling";
break;
case 1:
str[count] = "yi";
break;
case 2:
str[count] = "er";
break;
case 3:
str[count] = "san";
break;
case 4:
str[count] = "si";
break;
case 5:
str[count] = "wu";
break;
case 6:
str[count] = "liu";
break;
case 7:
str[count] = "qi";
break;
case 8:
str[count] = "ba";
break;
case 9:
str[count] = "jiu";
break;
default:
break;
}
n /= 10; //取完个位后更新
count++; //++保存到下一位置
}
第三步——逆序打印出来
char string_c[100] = ""; //初始化需要打印的字符串
for(int i = count - 1; i >= 0; i--){ //逆序输出
if(i == 0){
strcat(string_c,str[0]); //当count等于1时,只需要打印字符串的头部
}else{
char p[10];
strcpy(p,str[i]);
strcat(p," "); //满足题意,空格只在中间切最后一位没有空格
strcat(string_c,p);
}
}
printf("%s",string_c);