这是翁恺大大的“念数字”
我的作答如下
#include <stdio.h>
int main(){
int x=0;
int cnt=1;
int m=0;
scanf("%d",&x);
if(x<0){
x=-x;
printf("fu ");
}
int t=x;
while(t>9){
t/=10;
cnt*=10;
}
while(x>=0){
m=x/cnt;
x%=cnt;
cnt/=10;
switch(m){
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;
}
if(cnt!=0){
printf(" ");
}
}
return 0;
}
在网页外的编译器dev 里运行没有任何问题,复制到答题区后出现如下的问题
将while(x>=0)改成(x>0)后,出现了部分正确
求带老帮我看一下问题出在哪里?
谢谢
【以下回答由 GPT 生成】
我很抱歉,但您没有提供任何具体的问题。请详细说明您的问题,我将尽力提供解决方案和代码示例。
根据搜索的链接,浮点错误应该是发生了除0错误;
然后,代码将计算权值和提取数字每一位的部分修改下,以及增加对输入为0的情况处理下即可。
修改如下:
参考链接:
#include <stdio.h>
#include <math.h>
int main() {
int x=0;
int cnt=1;
int m=0;
scanf("%d",&x);
if(x<0) {
x=-x;
printf("fu ");
}
int t=x;
// 计算x最高位的权值,即最高位是最高位数数字 乘以 10的几次方
while(t>10) {
t/=10;
cnt*=10;
}
// printf("cnt=%d,x=%d\n",cnt,x);
// 如果x等于0,则输出"ling"
if (x==0){
printf("ling");
}
// https://blog.csdn.net/guomengkai/article/details/88088173
// 如果x大于0,则循环获取x的每一位数字,直到其为0
while(x>0) {
m=x/cnt%10; // 从最高位开始提取每一位的数字
//x%1=cnt;
//printf("m=%d,x=%d,cnt=%d\n",m,x,cnt);
cnt/=10; // 下一位数字的权值除以10
switch(m) {
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;
}
if(cnt!=0) { // 如果没到最后一位,则每一位数字后,打印一个空格
printf(" ");
}else{ // 如果计算完最后一位数字, 则退出循环
break;
}
printf("\n");
}
return 0;
}