B类:1002 写出这个数

题目

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10
​100
​​ 。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu

解题过程

数字长度过长,用字符数组
求和,运用循环
输出每个位数对应的拼音,用字符数组存储拼音(下标与拼音对应)
求每个位的数,用while循环
注意末尾没有空格

代码

#include<stdio.h>
int main(){
    
    
    char str[100000];
    //输入正整数
    scanf("%s",str);
    //计算各位数字之和
    int sum=0,i;
    for(i=0;str[i]!='\0';i++){
    
    
        sum+=str[i]-'0';//字符转换为数字
    }
    //此处可加printf("%d\n",sum);用来查错
    //存储每个位的数字
    int num[10000]={
    
    0},j=0;
    while(sum!=0){
    
    
        num[j++]=sum%10;//注意此处的j同时记录了数组num里面有几位数
        sum/=10;
    }
    //可用于查错
    /*for(i=0;i<j;i++){
        printf("%d\n",num[i]);
    }*/
    //输出对应的拼音
    char pinyin[][10]={
    
    "ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    int flag=1;
    for(i=j-1;i>=0;i--){
    
    
        if(flag==1){
    
    //注意是==而不是=
            printf("%s",pinyin[num[i]]);//注意是pinyin[num[i]],而不是pinyin[i]
            flag=0;
        }
        else{
    
    
            printf(" %s",pinyin[num[i]]);
        }
    }
    printf("\n");
}

另外一种

用switch case

#include<stdio.h>

int main()
{
    
    
    char s[10000];
    int i,j=0,count=0,sum=0,a[10];
    scanf("%s",s);
    for(i=0; s[i]!='\0'; i++)
        sum+=s[i]-'0';
    while(sum)
    {
    
    
        a[j]=sum%10;
        sum/=10;
        j++;
        count++;
    }
    for(j=count-1; j>=0; j--)
    {
    
       switch(a[j])
        {
    
    
        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(j)
            printf(" ");
    }
    return 0;
}
#include<stdio.h>
#include<math.h>
int main(){
    
    
    char str[100000];
    scanf("%s",str);
    //求和
    int j;
    long long sum=0;
    for(j=0;str[j]!='\0';j++){
    
    
    	sum+=str[j]-'0';
	}
	//查错printf("%lld\n",sum);
    //求有几位数
    int i=0,n=sum;
    while(n){
    
    
        n/=10;
        i++;
    }
    //查错printf("%d\n",i);
    //输出
    while(i){
    
    
        int temp=(int)pow(10,i-1);
        i--;
        //查错printf("%d\n",i);
        //查错printf("%lld\n",sum);
        //查错printf("%d %d\n",temp,i);
        int end=sum/temp;
        sum%=temp;
        //查错printf("%d\n",end);
        //查错printf("%d\n",sum); 
        switch(end){
    
    
            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(i!=0){
    
    
                printf(" ");
        }
    }
    printf("\n");
}

猜你喜欢

转载自blog.csdn.net/qq_51517771/article/details/115743166