一个简单问题的巨牛解法方案

我们公司的老总心血来潮,给大家出了一道编程题,想测试一下大家的编程能力。 
编写Java程序求7进制数1234560654321的10进制结果,要求:尽最大可能减少代码量、内存占用量和计算量。

我突发奇想,为了减少代码量,我用了Math类的pow方法,代码如下:

double sum=0;
        
for(int i=0;i<6;i++)
        {
          sum
+= (i+1*(Math.pow(7,12- i)+Math.pow(7, i));
          
         }
        System.out.println(
"用了Math函数:"+sum);

我把程序给老总看,老总看后,在题目的要求中加上了一条:不允许用Math 类,我晕!
他说要测试我的基础编程能力。
于是我将程序改成:

double sum = 0;
        
double a = 1;
        
int i=0;
        
int j=0;
        
double temp=0;

        
for (i = 0; i < 6; i++)
        {
            a 
= 1;
            temp
=0;
            
for (j = 0; j < 12 - i; j++)
            {
                a 
*= 7;
            }
            temp 
+= a;
            a 
= 1;

            
for (j = 0; j < i; j++)
            {
                a 
*= 7;
            }
            
            temp 
+= a;
            temp 
*= (i + 1);
            sum
+=temp;
            
        }
        System.out.println(
"用了78次乘法:"+sum);

老总认为我的乘法执行次数过多。
我再次修改程序:

double a = 1;
        
int i=0;
        
int j=0;
        
double sum=0;
        
for (i = 1; i <=6; i++)
        {
            a 
= 1;
            
for (j = 1; j <=6- i; j++)
            {
                a 
*= 7;
                
            }
            sum
+=i*a;
            
        }
        sum
*=7*7*7*7*7*7*7;
        
for (i = 1; i <=6; i++)
        {
            a 
= 1;

            
for (j = 1; j <= i-1; j++)
            {
                a 
*= 7;
            }
            
            sum 
+= i*a;
            
        }
        System.out.println(
"用了49次乘法:"+sum);

老总看后还是不满意,他终于出手了。下面是他的程序,
        int[] s={1,2,3,4,5,6,0,6,5,4,3,2,1};
        
double sum=s[0];
        
for(int k=1;k<13;k++)
        {
            sum
=sum*7+s[k];
        }
        System.out.println(
"用了12次乘法:"+sum);

怎么样?够狠吧!只用了12次乘法,大家还有什么其他的高招吗?如果有,请给我留言,不胜感激。

posted on 2007-09-21 22:23 我为J狂 阅读(1944) 评论(18)  编辑  收藏 所属分类: Java算法

评论

# re: 一个简单问题的巨牛解法方案。 2007-09-21 23:06 千里冰封

呵呵,有意思  回复  更多评论   

# re: 一个简单问题的巨牛解法方案 2007-09-21 23:39 下雨

真是厉害呀
很好很不错GOOD
上品

-------------------------------------------------
http://www.sy555.com  回复  更多评论   

# re: 一个简单问题的巨牛解法方案[未登录] 2007-09-21 23:49 Javacap

基础的数据结构问题,作Java作久了就远离了基础?  回复  更多评论   

# re: 一个简单问题的巨牛解法方案 2007-09-22 00:40 啊光

呵呵,表驱动法.  回复  更多评论   

# re: 一个简单问题的巨牛解法方案 2007-09-22 01:24 惊鸿逝水

你们公司的老总很闲嘛,不做运营,管理决策吗?  回复  更多评论   

# re: 一个简单问题的巨牛解法方案 2007-09-22 01:45 bean

最后一个能算是算法吗?把13个数字放数组里面?另外再给你个数怎么办?还不得挨个算出来。  回复  更多评论   

# re: 一个简单问题的巨牛解法方案 2007-09-22 04:54 jie

搞笑,时代变了  回复  更多评论   

# re: 一个简单问题的巨牛解法方案 2007-09-22 10:39 adalovelacer

最后一个能算是算法吗?把13个数字放数组里面?另外再给你个数怎么办?还不得挨个算出来

说得十分对,如果这样都算算法的的话,最快的算法是:

sum = 1234560654321的10进制结果;
System.out.println("一次乘法都不用:"+sum);  回复  更多评论   

# re: 一个简单问题的巨牛解法方案 2007-09-22 11:32 千里冰封

Long.parseLong("1234560654321", 7);


这样岂不是更简单?
  回复  更多评论   

# re: 一个简单问题的巨牛解法方案 2007-09-22 11:43 我为J狂

@千里冰封
你的方法确实很简单,不过这道题考察的不是使用JavaAPI的能力,而是基础编程能力,也就是说不能使用JDK中定义好的Java方法。  回复  更多评论   

# re: 一个简单问题的巨牛解法方案 2007-09-22 11:52 我为J狂

@bean
你提到的关于算法灵活性的问题很好,我将最后一个算法更改为
static double getValue(String str)
{
char[] c = str.toCharArray();
double sum = Double.parseDouble(c[0] + "");
for (int k = 1; k < 13; k++)
{
sum = sum * 7 + Double.parseDouble(c[k] + "");
}
return sum;
}
System.out.println("用了12次乘法:" + getValue("1234560654321"));  回复  更多评论   

# re: 一个简单问题的巨牛解法方案 2007-09-22 11:54 我为J狂

@adalovelacer
我不太理解你的写法,你不会是在起哄吧?  回复  更多评论   

# re: 一个简单问题的巨牛解法方案 2007-09-22 11:59 我为J狂

@惊鸿逝水
每个老总都要做运营,管理决策,不过我们老板是做技术出身,清华硕士,他对员工要求很严,他的员工仅仅具有编程能力是远远不够的,他经常会给他的员工出一些物理数学之类的问题来难为大家。  回复  更多评论   

# re: 一个简单问题的巨牛解法方案[未登录] 2007-09-22 12:15 Javacap

算法是算法,就是多项式运算的算法,随便一本数据结构书上都应该有。  回复  更多评论   

# re: 一个简单问题的巨牛解法方案[未登录] 2007-09-27 12:50 NeedJava

static double getValue( String value, int radix )
{
 if( value==null||radix<0 )
  {
   return 0.00;
  }

 int length=value.length();

 double sum=(double)( value.charAt( 0 ) );

 for( int i=1; i<length; i++ )
  {
   sum=sum*radix+(double)( value.charAt( i ) );
  }

 return sum;
}

System.out.println( "用了12次乘法:"+getValue( "1234560654321", 7 ) );

Double.parseDouble( c[k]+"" )非常愚蠢,难道LZ不觉得?其实就是强行转换,

没必要toCharArray,建议LZ还是看看Java的源代码再考虑算法吧!如果你能虚心的接受我的建议。  回复  更多评论   

# re: 一个简单问题的巨牛解法方案[未登录] 2007-09-27 12:56 NeedJava

我觉得一个好的管理者,不仅要给员工以激励,更要加强培养员工的综合素质(比如口才,交际能力,经济知识),而不是专于某些算法,毕竟不是研究院!我们得知道,如果我们到了一定年龄,不能花更多精力编程了,我们该如何转型!  回复  更多评论   

# re: 一个简单问题的巨牛解法方案 2007-10-03 20:25 我为J狂

@NeedJava
人外有人,天外有天,我一定虚心向您学习。  回复  更多评论   

# re: 一个简单问题的巨牛解法方案[未登录] 2013-11-25 09:34 HP

DOOD  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2007年10月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

导航

统计

常用链接

留言簿(11)

随笔分类(48)

文章分类(29)

常去逛逛

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜