• 第三周作业(二):分析代码


          给了一段C#代码,并要求分析是用来干什么的。

          

    using System;
    
    using System.Collections.Generic;
    
    using System.Text;
    
    namespace FindTheNumber
    
    {
      class Program
      {
        static void Main(string[] args)
        {
          int [] rg =
              {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
               20,21,22,23,24,25,26,27,28,29,30,31};
          for (Int64 i = 1; i < Int64.MaxValue; i++)
          {
            int hit = 0;
            int hit1 = -1;
            int hit2 = -1;
            for (int j = 0; (j < rg.Length) && (hit <=2) ; j++)
            {
              if ((i % rg[j]) != 0)
              {
                hit++;
                if (hit == 1)
                {
                  hit1 = j;
                }
                else if (hit == 2)
                {
                  hit2 = j;
                }
                else
                  break;
              }
    
            }
            if ((hit == 2)&& (hit1+1==hit2))
            {
              Console.WriteLine("found {0}", i);
            }
          }
        }
      }
    }

          讲道理,我是没有学习过C#的,仅仅学习了C和C++,稍微看了一下JAVA。

          前面的那几行using大概是类似于C里的include,之后往下看倒是没有什么问题,不过看到了Int64和Int64.MaxValue,倒是没见过,然而从使用方法来看Int64应该是属于一种很长的整形,而Int64.MaxValue应该是属于该整形的最大取值范围。去网上一查倒也是猜对了,但是Int64.MaxValue这个范围真的是大得离谱:

    表示值介于 -2^63 ( -9,223,372,036,854,775,808) 到2^63-1(+9,223,372,036,854,775,807 )之间的整数。存储空间占 8 字节。用于整数值可能超过 int 数据类型支持范围的情况。

        (出自百度百科)

          这个时候就开始疑惑了,到底是什么数才会要从这么大的范围里面找?为什么这个程序的代码不使用int,而使用int64?

          于是就把代码放进了编译器里面走一波,然而发现……没动静。这到底是编译发生问题还是这个数特别难找?亦或是这个数根本就找不到?

          从程序代码继续看,第二个for循环

    for (int j = 0; (j < rg.Length) && (hit <=2) ; j++)

          循环条件是j小于数组rg的长度并且还要hit小于等于2,循环内容就是不断地判断hit到底该取什么值

          回到第一个for循环跳过第二个for循环往下看,可以看到一个if语句,这个就是输出要找的数的输出语句

    if ((hit == 2)&& (hit1+1==hit2))

          看了一会,终于也是知道要干什么了。

          回答问题:

    1.要找的大概是满足的数是“不可以同时整除2到31中连续的两个数可以整除其他的”。

    2.应该不存在,因为等了半天黑框框都没动。(不排除硬件限制,但是没有得到结果之前只能认定为不存在)

    3.不存在的数无法计算。

    4.固态硬盘加快数据传输速度,再改一下算法或许会比较好。

      
  • 相关阅读:
    android开发布局三(微信布局)
    Android开发adb,SQLite数据库运用
    直线电机磁负荷、电负荷
    MIT公开课(一):电场和偶极子
    哈工大电气工程系硕士研究生入学复试——自动控制原理1、2章
    直线电机与旋转电机的区别
    Math类介绍
    Scala编辑器和IntelliJ IDEA开发环境配置
    减少cpu的方法
    AS内存清理,建议以及查找内存泄露的方法
  • 原文地址:https://www.cnblogs.com/mohaozhong/p/5294875.html
Copyright © 2020-2023  润新知