#include<stdio.h>
int main(){
int N;
scanf("%d\n",&N);
if(N<0){
printf("fu ");
N=-N;
}
int flag=0;
for(;N!=0;){
N/=10;
flag++;
}
int num[flag];
for(int i=flag-1;i>=0;i++){
num[i]=N%10;
N/=10;
}
for(int i=0;i<flag;i++){
switch(num[i])
{
case 0:
printf("ling ");
break;
case 1:
printf("yi ");
break;
case 2:
printf("er ");
break;
case 3:
printf("san ");
break;
case 4:
printf("si ");
break;
case 5:
printf("wu ");
break;
case 6:
printf("liu ");
break;
case 7:
printf("qi ");
break;
case 8:
printf("ba ");
break;
case 9:
printf("jiu ");
break;
default:
;
}
}
}
我的代码出现问题,本题希望可以得到大家的指导,谢谢你的帮助!
从输入获取一个值,scanf()里面的换行符可以去掉;
操作N前,先将N的值先备份下,然后后面每次操作N可以再恢复为输入时的值;
然后还有其他地方稍微修改下即可。
修改如下:
#include<stdio.h>
int main(){
int N;
scanf("%d",&N); // 从输入获取一个整数,scanf里面的'\n'不需要
if(N<0){
printf("fu ");
N=-N;
}
int temp=N; // 对N进行操作前,先备份N的值
// printf("0\n");
int flag=0;
for(;N!=0;){
N/=10;
flag++;
}
// printf("1\n");
int num[flag];
N=temp; // 将N的值恢复为输入时的值
for(int i=flag-1;i>=0;i--){
num[i]=N%10;
N/=10;
}
//printf("2\n");
for(int i=0;i<flag;i++){
switch(num[i])
{
case 0:
printf("ling");
break;
case 1:
printf("yi");
break;
case 2:
printf("er");
break;
case 3:
printf("san");
break;
case 4:
printf("si");
break;
case 5:
printf("wu");
break;
case 6:
printf("liu");
break;
case 7:
printf("qi");
break;
case 8:
printf("ba");
break;
case 9:
printf("jiu");
break;
default:
;
}
// 当不是最后一位数字时,每个数字打印一个空格
if (i!=(flag-1)){
printf(" ");
}
}
N=temp;
// 如果输入的值为0,单独打印一个"ling"
if(N==0){
printf("ling");
}
}
【以下回答由 GPT 生成】
#include <stdio.h>
void printChineseNumber(int num) {
int flag = 0;
int tempNum = num;
if (tempNum == 0) {
printf("ling ");
return;
}
if (tempNum < 0){
printf("fu ");
tempNum = -tempNum;
}
while (tempNum != 0) {
tempNum /= 10;
flag++;
}
int power = flag - 1;
int divisor = 1;
for (int i = 0; i < power; i++) {
divisor *= 10;
}
while (divisor != 0) {
int digit = num / divisor;
switch(digit) {
case 0:
printf("ling ");
break;
case 1:
printf("yi ");
break;
case 2:
printf("er ");
break;
case 3:
printf("san ");
break;
case 4:
printf("si ");
break;
case 5:
printf("wu ");
break;
case 6:
printf("liu ");
break;
case 7:
printf("qi ");
break;
case 8:
printf("ba ");
break;
case 9:
printf("jiu ");
break;
}
num %= divisor;
divisor /= 10;
}
}
int main(){
int N;
scanf("%d", &N);
printChineseNumber(N);
return 0;
}
在这个修改后的代码中,我定义了一个新的函数printChineseNumber
来实现逐位输出整数的中文数字。首先,我添加了对0和负数的特殊情况处理。然后,使用循环和运算符来计算整数的位数和每一位上的值,通过除法和取模运算来获取到每一位的数字,并使用switch语句将数字转换为对应的中文数字进行输出。最后,在主函数中调用printChineseNumber
函数来实现逐位输出整数的中文数字。
【相关推荐】