7-30 念数字 (15分)

在这里插入代码片## 7-30 念数字 (15分)

输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:
0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu
输入格式:
输入在一行中给出一个整数,如:1234。
提示:整数包括负数、零和正数。
输出格式:
在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如 yi er san si。
输入样例:
-600
输出样例:
fu liu ling ling

#include<stdio.h>
int main(){
    int a;
    scanf("%d",&a);
    if(a==0) printf("ling"); 
    else if(a<0){ a=-a; printf("fu ");}
	
		int i,m,n,b=a,c,t=1;
		for(i=0;b>0;i++){
	    	b/=10;
	    	t*=10;
		}//这一步之后a不变,会的得到a是几位数。
		while(a){
	    	b=a;
	    	while(b>9){ b/=10; }
	   	 	t/=10;
	    	m=b;
	    	switch(m){
            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:
            break;	
	    	}
	    	i--;
	    	if(i>0) printf(" "); 
	    	a-=m*t;
	    	c=a;
	    	for(n=0;c>0;n++){
	    		c/=10;
				}//看此时a的位数,防止位于数字中间的零被吃掉
	    	while(n!=i&&i!=1){
	        	printf("ling ");
	        	i--;
	        	t/=10;
	    	}
		}
		if(i==1){
	  	printf("ling");
	    i--;
		}
    return 0;
}

好像做的时候给的用例没管中间的零?

#include<stdio.h>
int main(){
    char fh;
    int ret=1;
    char shu[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    while(1){
       fh=getchar();
        if(fh=='-') {printf("fu");ret=0;}
        else if(fh>='0'&&fh<='9'){
            if(ret) {printf("%s",shu[fh-'0']);ret=0;}
            else printf(" %s",shu[fh-'0']);
        }
        else break;
     }
    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值