題目:求1+x+x^2+x^3+...+x^n的和(儘可能少的使用乘法運算)。
分析:可以使用折半的方式,每次計算兩個的和,比如首先計算出1+x的值保存,然後用保存的這個值乘以x^2可以得到後面兩項的值再保存,依次類推直到計算結束。需要注意的是如果n是奇數或者偶數的情況是不同的,當n爲奇數的時候就完全按照前面的方法計算即可,但是n爲偶數的時候比較麻煩,因爲最後一項的計算比較困難,所以當n爲偶數的時候首先計算x+x^2的值,然後用這個和來作爲迭代的基礎,剩餘的1最後再加到和裏面,這樣相當於把最後一項替換爲1,這樣計算簡便不少。這樣處理之後需要做的乘法的次數大約爲n/2次。
程序的代碼如下:
#include <stdio.h>
int main()
{
int x, n, x2;
int sum = 0, value;
int count = 0, i;
printf("Please input x and n:\n");
scanf("%d%d", &x, &n);
printf("x=%d, n=%d\n", x, n);
if(n%2) //n爲奇數,用戶輸入n實際上是求n+1個數的和
{
x2 = x*x;
count ++;
value = 1 + x;
sum += value;
i = 1;
while(i < n)
{
value *= x2;
sum += value;
i += 2;
count ++;
}
}
else //n爲偶數
{
x2 = x*x;
value = x + x2;
sum += value;
count ++;
i = 2;
while(i < n)
{
value *= x2;
sum += value;
i += 2;
count ++;
}
sum += 1; //n爲偶數時,最後才把1加到和裏面
}
printf("運算的結果爲:%d.\n", sum);
printf("一共需要做%d次乘法。\n", count);
return 0;
}
運行結果截圖: