我們公司的老總心血來(lái)潮,給大家出了一道編程題,想測(cè)試一下大家的編程能力。
編寫(xiě)Java程序求7進(jìn)制數(shù)1234560654321的10進(jìn)制結(jié)果,要求:盡最大可能減少代碼量、內(nèi)存占用量和計(jì)算量。
我突發(fā)奇想,為了減少代碼量,我用了Math類(lèi)的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函數(shù):"+sum);
我把程序給老總看,老總看后,在題目的要求中加上了一條:不允許用Math 類(lèi),我暈!
他說(shuō)要測(cè)試我的基礎(chǔ)編程能力。
于是我將程序改成:
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);
老總認(rèn)為我的乘法執(zhí)行次數(shù)過(guò)多。
我再次修改程序:
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次乘法,大家還有什么其他的高招嗎?如果有,請(qǐng)給我留言,不勝感激。