7-30 念数字

输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出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

思路:

  • 分解整数(操作整数的位数比较安全),并不是倒序输出,而需要正序分解(倒序分解也可以,把结果储存到数组里头,然后倒序遍历数组)
  • 构造字符串数组,让整数去匹配字符串数组
  • 遍历输出
  • 要仔细,比如 N < 0 的时候
#include<stdio.h>
#include<math.h>
int getdigits( int N ) ;

int main(void){
char *pinyin[10] ={"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu" } ;
int N ;
scanf("%d",&N) ;
int i = getdigits( N ) ;//整数的位数
int j ;//操作数组的下标 

if( N < 0 ){
    printf("fu ") ;
    N = abs(N) ;
}

while( i > 0 ){
    j = N / pow( 10 , i-1) ;//如果上一步没有取N的绝对值,当N<0时,到这里很有可能出错 
    printf("%s",pinyin[j]) ;
    N = N % (int)pow( 10 , i-1 ) ;//pow默认返回的是double 
    if( i > 1){
        printf(" ") ;
    }
    i-- ;
}
    return 0 ;
}

int getdigits( int N ){
    N = abs(N) ;
    int i = 1;//用来数位数,默认为1

    for( ; N > 9 ; i++){
        N = N / 10 ;
    }

    return i ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值