zoukankan      html  css  js  c++  java
  • 写出来吧问题详解-编程练习题(100)

    目录

    问题:

    分析:

    C++代码:

    总结:


    问题:

    4.

    【问题描述】

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

    【输入形式】

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

    【输出形式】

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

    【样例输入】

    1234567890987654321123456789

    【样例输出】

    yi san wu

    【样例说明】
    友情提示汉语拼音

    0~9:ling yi er san si wu liu qi ba jiu shi

    分析:

    首先乍一看,题目好简单,但是里边的考点只要有1)对大数字的处理,本题只涉及对大数值的存储,但是如果让算两个大数值的加减乘除呢?该怎么做。最笨的方法就是使用字符串或者数组存储大数值,然后从低位数高位数计算,就像小学列式子计算一样。2)对字符串的操作。大数值存入字符串之后需要进行处理。3)对整数操作的考察,比如操作每位的数字,这是很基本也很有趣的操作。

    C++AC代码:

    #include <iostream>
    using namespace std;
    int getLength(int a);
    int main()
    {
        string str;
        string number[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; //从0-9的汉语拼音
        int sum = 0;        //存储各位数字之和的变量
        int temp;           //计算过程中的中间变量
        int len_sum = 0;    //存储sum变量的长度
        int power = 1;      //存储10的n次方
        cin >>str;          //读入数据,有可能是一个超出int型能存储的数值。所以用str字符串来存储。
        for(int i=0; i<str.size(); i++) //计算各位数字之和存入sum
        {
            sum += str[i]-'0';
        }
        len_sum = getLength(sum);       //计算sum的长度
        for(int j =1; j<len_sum; j++)   //输出sum各位数字对应的汉语拼音
        {
            power = 1;
            for(int k=j; k<len_sum; k++)power *=10; //计算10的len_sum-1次方
            temp = sum/power;                       //计算sum各个位的数字
            sum = sum%power;                        //取余,计算下一位
            cout << number[temp] <<' ';             //输出对应的汉语拼音
        }
        cout << number[sum] << endl;
    
        return 0;
    }
    int getLength(int a)   //求int型数字的长度的函数
    {
        int len =0;  //存储变量a的长度。
        while(a)
        {
            a=a/10;
            len ++;
        }
        return len;
    }
    

    总结:

    在做本题的时候对C++String类的操作不太熟悉,浪费了很多时间。在使用math.h函数库中double pow()函数时出现了点问题,计算pow(10,2)——10的2次方,时得到的结果是99,究其原因,pow()函数返回的是double类型的值,在强转为int型时可能向下求整了,导致取值99,程序最后结果也不对。后来只能自己写个循环来求10的len_sum-1次方。也有可能是pow()函数在计算时只能算能被2^n(n=0、1、2......)的数值。

    我使用的方法是求出sum(大数值各位数字之和)的长度之后再处理输出sum各位数字对应的汉语拼音,也可以使用一个数组存储sum各位数字,然后依次输出对应汉语拼音,但是这样的话我们申请数组空间时不容易设定,太小了可能不够存储,太大了浪费内存。

  • 相关阅读:
    java浅谈
    学习心得 六 修改
    学习心得 六
    学习心得 五
    学习心得 四
    学习java心得 三
    学习java心得 二
    学习java心得 一
    学习前言
    课程进展
  • 原文地址:https://www.cnblogs.com/www-helloworld-com/p/10202960.html
Copyright © 2011-2022 走看看