我們公司的老總心血來潮,給大家出了一道編程題,想測試一下大家的編程能力。
編寫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次乘法,大家還有什么其他的高招嗎?如果有,請給我留言,不勝感激。