• 2015年“梦想杯”年江苏省信息与未来小学生程序设计比赛试题--加数


    由于省赛延期,所以继续更新与常州市赛/江苏省赛有关的内容!(本来想开新系列的)


    题目描述

            给出一个正整数n(1<=n<=100000)。再n的右边加入n的一半,然后再在新数的右边加入n的一半的一半,直到不能再加为止。

    输入

            一个整数N。

    输出

            加数结束后新数的长度。

    样例组

    1. 输入 37
    2. 输出 8


    一、比较直白的思路

            这道题目看起来是一道模拟题,要我们模拟加数过程。因此这里要用到string(long long不够加)来存储加数的结果。因此还要用到整数转字符串的程序(真复杂)。

            最后直接输出字符串(如s.size())的长度即可。

            总结一下,这种思路的主程序如下:

    1. string llts(long long n)
    2. {
    3. string s="";
    4. while(n)
    5. {
    6. n/=10;
    7. s=s+(char)(n+48);
    8. }
    9. return s;
    10. }
    11. int js(int n)
    12. {
    13. string s="";
    14. while(n>0)
    15. {
    16. s=s+llts(n);
    17. n/=2;
    18. }
    19. return s.size();//或s.length()
    20. }

    二、另一种思路

            另外一种思路会用到求整数位数程序。简单点说,就是不用string储存加数位数,直接开变量存储加数的位数。最后输出位数即可。综合来看这两个程序的思路是差不多的,只是第二种思路简化了模拟过程罢了。

            这种思路的主程序如下:

    1. int qws(int n)
    2. {
    3. int s=0;
    4. while(n>0)
    5. {
    6. s++;
    7. n/=10;
    8. }
    9. return s;
    10. }
    11. int js(int n)
    12. {
    13. int ans=0;
    14. while(n>0)
    15. {
    16. ans+=qws(n);
    17. n/=2;
    18. }
    19. return ans;
    20. }

    题目标程

            题目标程如下:

            第一种思路:

    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. string llts(long long n)
    4. {
    5. string s="";
    6. while(n)
    7. {
    8. n/=10;
    9. s=s+(char)(n+48);
    10. }
    11. return s;
    12. }
    13. int js(int n)
    14. {
    15. string s="";
    16. while(n>0)
    17. {
    18. s=s+llts(n);
    19. n/=2;
    20. }
    21. return s.size();//或s.length()
    22. }
    23. int main()
    24. {
    25. int n;
    26. cin>>n;
    27. cout<<js(n);
    28. return 0;
    29. }

            第二种思路:

    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. int n,ans=0;
    4. int js(int n)
    5. {
    6. int s=0;
    7. while(n>0)
    8. {
    9. s++;
    10. n/=10;
    11. }
    12. return s;
    13. }
    14. int main()
    15. {
    16. cin>>n;
    17. while(n>0)
    18. {
    19. ans+=js(n);
    20. n/=2;
    21. }
    22. cout<<ans;
    23. return 0;
    24. }

    这道题目就这么多。 

  • 相关阅读:
    《中国棒球》:推进备战·开启新篇章
    【无标题】
    linux api官网
    【前端工程化】使用jest单元测试,提高效率的方法
    给按钮的边框和文字设置不同的背景色
    【蜂鸟E203内核解析】Chap.1 RISC-V指令集架构与硬件结构)
    python Never是什么?
    云原生时代,让软件架构设计行云流水的奥秘
    Centos OpenVp*
    阿里云高庆瑞:高弹性、高可用、低成本的云上资源管理最佳实践
  • 原文地址:https://blog.csdn.net/ceshyong/article/details/125634165