美文网首页PATPAT乙级
1002 写出这个数

1002 写出这个数

作者: Gvence | 来源:发表于2019-04-12 18:25 被阅读0次

    题目来源

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

    输入格式:

    每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10^{100}​​。

    输出格式:

    在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。

    输入样例:

    1234567890987654321123456789
    

    输入样例:

    yi san wu
    

    题目解析:

    难点1:

    题目要求输入一串正整数,而这串正整数比较大,最高可达10^{100},这个数值远超int 和long int的存储上限,一个8字节的long int 的范围约在(-10^{18 }~10^{18})之间,所以不能直接用:

    long int n;
    scanf("%d", &n);
    

    这里我的思路是,创建一盒长度为100的字符数组:

    char n[100];
    

    每个元素存一个数字的字符量,然后再用字符量的ASCII值减去0字符的ASCII值得到整形值,如下:

    sum += n[i] - '0';//获取整形值
    

    难点2:

    为了最后能输出0 ~ 9数字的拼写:ling ~ jiu。我们需要一个字符串表,用来查找这些拼写,这里有两种方法:
    方法1,创建一个二维字符数组:

    const char dic[10][] = {"ling","yi","er",\ //这是一个换行符
    "san","si","wu","liu","qi","ba","jiu"}
    

    方法2,创建一个一维字符指针数组,数组的每一个元素都是一个字符指针,指向我们定义的拼写字符的地址:

    const char *dic[] = {"ling","yi",\ //这是一个换行符
    "er","san","si","wu","liu","qi","ba","jiu"};
    

    之所以用了const,是因为我这里的元素都是常量,不希望被修改。

    完整代码:

    #include <stdio.h>
    
    int main(){
        char n[100];
        const char *p[3];//定义一个指针,用来指向要输出的拼写的地址,
                          //为什么是3个,这里可以思考一下下
        int index,i;
        const char *dic[] = {"ling","yi",\ //换行符
    "er","san","si","wu","liu","qi","ba","jiu"};
        int sum = 0,j = 0;
        scanf("%s", n);//字符化读入
            
        for (i = 0; n[i] != '\0'; i++){
            sum += n[i] - '0';
        }//遍历求和
    
        if (sum == 0){
            index = 0;
            printf("%s", dic[index]);
        }else{
        while(sum>0){
            index = sum%10;
            sum /= 10;
            p[j] = dic[index];
            j++;
        }//遍历sum,使指针指向字母拼写的地址
    
        while(j>0){
            j -- ;
            printf("%s", p[j]);
            if (j != 0){
                printf(" ");
            } 
        }//遍历指针输出字母拼写
    }
        return 0;
    }
    

    相关文章

      网友评论

        本文标题:1002 写出这个数

        本文链接:https://www.haomeiwen.com/subject/xdkhwqtx.html