写出这个数 (20)

写出这个数 (20)

PAT(Basic Level) Practise NO.1002

读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。

这里保证n小于10^100。

输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,

但一行中最后一个拼音数字后没有空格。

输入样例:
1234567890987654321123456789
输出样例:
yi san wu

#include <stdio.h>

int sum_of_digital();                       //声明求各位数之和的函数
void myprintf(int n);                       //声明格式输出的函数
void pinyin_printf(int n);                  //声明拼音输出的函数

int main(int argc, char const *argv[])
{
    int n = 0;                              //用于存储各位数之和

    n = sum_of_digital();                   //输入各位数
    myprintf(n);                            //按格式要求输出

    return 0;
}

int sum_of_digital()                        //定义求各位数之和的函数
{
    int temp = 0, num = 0;
    char c = '\0';

    while( ( c = getchar() ) != '\n' )      //只要输入的字符不是'\n',即为真
    {
        num = c - '0';                      //输入的数字
        temp = temp + num;
    }

    return temp;
}

void myprintf(int n)                //定义格式输出的函数
{
    int temp = 0, i = 0;
    char s[4] = {'\0'};

    do{
        temp = n%10;                //取n尾数
        s[i++] = temp;              //将取出的尾数逆序放在数组中
        n = n/10;                   //将n缩小一位
    }while(n > 0);

    do{
        temp = (int)s[--i];
        pinyin_printf(temp);        //将取出的尾数以拼音的格式输出
        if ( i != 0)    printf(" ");
    }while(i !=0);
    printf("\n");
}

void pinyin_printf(int n)           //声明拼音输出的函数
{
    switch (n){
        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: printf("error\n");
    }
}

本人原创代码,对于各位读者的阅读不胜感激。

如有疑惑,可以在下方评论区中提出疑惑,博主将会与读者一起讨论问题。

谢谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

James_Xue_2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值