我们公司的老总心血来潮,给大家出了一道编程题,想测试一下大家的编程能力。
编写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次乘法,大家还有什么其他的高招吗?如果有,请给我留言,不胜感激。