• 随堂作业——到底有几个“1”(C++)


    一、设计思路

      在课堂上讨论的时候,老师提出的思路是利用之前的结果计算出比它更大的数字的“1”。但是我不是这么想的,我是把输入的正整数每位上的数都分解出来计算。如abc,就先算c,再加上b,最后再加上a。

    二、源代码

     1 // one.cpp : Defines the entry point for the console application.
     2 //
     3 
     4 #include "stdafx.h"
     5 #include "iostream.h"
     6 
     7 int FindOnes(int num)
     8 {
     9     int ones,mul,num1,num2,num3;
    10     ones=0;
    11     mul=1;                //除数,10的n次方
    12     num1=num2=num3=0;
    13     while(num/mul)        //当取整后不为零的话,就循环计算
    14     {
    15         num1=num-(num/mul)*mul;        //后一位上的数字
    16         num2=(num/mul)%10;            //当前位数上的数字
    17         num3=num/(mul*10);            //前一位上的数字
    18         switch(num2)                //若正整数为abc,b为当前位数
    19         {
    20             case 0:                    //余数为0时,包含a*mul个1;
    21                 ones+=num3*mul;
    22                 break;
    23             case 1:                    //余数为1时,包含a*mul+c+1;
    24                 ones+=num3*mul+num1+1;
    25                 break;
    26             default:                //其余>1的情况都是(a+1)*mul
    27                 ones+=(num3+1)*mul;
    28                 break;
    29         }
    30         mul*= 10;                    //改变除数,继续计算更高位
    31     }
    32     return ones;
    33 }
    34 int main(int argc, char* argv[])
    35 {
    36     int number,ones;    //数字、1的个数
    37     cout<<"请输入一个正整数:";
    38     cin>>number;
    39     ones=FindOnes(number);
    40     cout<<number<<"中“1”的个数为"<<ones<<endl;
    41     return 0;
    42 }

    三、结果截图

    四、心得体会

      敲代码的时候,我以为会挺好写的,想用递归的思想来实现,但是没能自己将每位上的情况总结出来。于是借鉴了一下网上的思路,有个程序是一次性看三位,当前位、高一位和低一位。代码简洁完美。

      我发现每次写这种注重算法的程序时,自己就捉襟见肘了,还是得多练,提高一下自己优化代码的能力。

  • 相关阅读:
    Java:面向对象的编程语言
    Java基本数据类型
    NotePad++安装及配置
    MarkDown的黄金搭档Typora编辑器
    rabbitmq常用命令【转载】
    rabbitmqweb管理端口http://localhost:15672/ 无法访问可能出现的问题
    又一个关于TP5的坑 模板页注释了的 {aaa} 依然是会被访问的
    关于layui的分页
    使用TP5容易遇到的坑
    TP5访问不了控制器
  • 原文地址:https://www.cnblogs.com/JJJanepp/p/4471218.html
Copyright © 2020-2023  润新知