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各位数字,然后依次输出对应汉语拼音,但是这样的话我们申请数组空间时不容易设定,太小了可能不够存储,太大了浪费内存。

  • 相关阅读:
    jMeter 里 CSV Data Set Config Sharing Mode 的含义详解
    如何使用 jMeter Parallel Controller
    使用 Chrome 开发者工具 coverage 功能分析 web 应用的渲染阻止资源的执行分布情况
    使用 Chrome 开发者工具的 lighthouse 功能分析 web 应用的性能问题
    关于 SAP 电商云首页加载时触发的 OCC API 请求
    SAP UI5 确保控件 id 全局唯一的实现方法
    SAP 电商云 Accelerator 和 Spartacus UI 的工作机制差异
    介绍一个好用的能让网页变成黑色背景的护眼 Chrome 扩展应用
    Chrome 开发者工具 performance 标签页的用法
    Client Side Cache 和 Server Side Cache 的区别
  • 原文地址:https://www.cnblogs.com/www-helloworld-com/p/10202960.html
Copyright © 2011-2022 走看看