zoukankan      html  css  js  c++  java
  • code还是水仙花数这次很长的水仙花

     

    //之所以长,一是因为这个版本比上一个版本改进使用了long类型,二
    //是因为这个版本由于位数的增加,时间上出现明显延时,运行一次感
    //觉等待的时间变长了。

    //打印<=19位(long)的水仙花数

    public class Narcissus {
        public static void Main(string[] cmd){
            if ( cmd.Length < 1){
                System.Console.WriteLine("this is [long] Data type " +
                            "Implementation, \nit supports up to [19] " +
                            "digit(that is, the dis [3,19])"
                            );
                System.Console.WriteLine("\nUsage : Narcissus2 <digits>");
            }
            else{
                // 参数异常还未进行判断。
                // if (IsInt(cmd[0])){
                    DoIt(int.Parse(cmd[0]));
                // }
            }
        }   
        // check if a string value is integer number
        // static bool IsInt(string strNum){
            // int ix = 0;
            // bool blnReturn = true;
            // while (ix < strNum.Length){
                // if(!System.Char.IsDigit(strNum[ix])){
                    // blnReturn = false;
                // }
            // }
            // return blnReturn;
        // }
        //just do it
        static void DoIt(int intDigits){       
            long low  = Pow(10,intDigits-1);
            long high = Pow(10,intDigits);       
            long ix = low;    
            while (ix < high){
                if(IsNarc(ix,intDigits)){
                    System.Console.Write(ix + "\t");
                }
                ix++;           
            }
        }
        //long support digits implementation, 19 digits
        static bool IsNarc(long lngNum,int intDigits){
            long lngPlace = 0;          //位上的数码
            long lngPlaceWeight = 1;    //位权
            long lngSum = 0;            //位上的数码的立方的和。
            long lngTemp = lngNum;
            while (lngTemp > 0){           
                lngPlace = (lngNum % (lngPlaceWeight*10))/lngPlaceWeight;                     
                lngPlaceWeight *= 10;
                lngTemp /= 10;
                lngSum += Pow(lngPlace,intDigits);        
            }       
            return lngSum == lngNum;
        }
        //long implementation
        static long Pow(long lngBase, long lngExponent){
            long lngProduct = 1;
            long ix = 0;
            ////treat 0^0 = 1, omit the handling of that condition
            //if (intBase == 0){               
            //    throw new Exception("the base can not be 0");
             //}
            while(ix < lngExponent){
                lngProduct *= lngBase;
                ix++;
            }
            return lngProduct;
        }
    }

    //写完了后经过简单的测试后发现,这个程序存在严重的性能问题。在算6位时还算
    //正常,但到了7位就开始明显看到延迟了。经过简单分析(单独调用),觉得
    //IsNarc()的时间开销并不大,主要的时间花销都用在了DoIt()中的循环,但似乎,
    //这个个循环没有什么改进的。
    //我暂时还没有解决方案。。。。

  • 相关阅读:
    RF(常用关键字)
    RF(元素定位)
    HR系列GPS北斗时间同步服务器在电力系统典型应用
    基于GPS北斗卫星授时系统和NTP网络授时服务器的设计与开发
    北斗卫星同步时钟(NTP网络时钟服务器)成功投运世界级工程港珠澳大桥
    网络时钟服务器,NTP授时设备,北斗网络校时服务器,GPS时间同步器
    SAP SD基础知识之交货单不完全日志
    SAP SD基础知识之创建并处理外向交货单
    SAP SD基础知识之订单中装运相关的功能 II
    SAP SD基础知识之输出控制(Output Control)
  • 原文地址:https://www.cnblogs.com/qinghao/p/1543884.html
Copyright © 2011-2022 走看看