面試題&筆試題:求1+x+x^2+x^3+...+x^n的和(儘可能少的使用乘法運算)

題目:求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;
}
運行結果截圖:


發佈了215 篇原創文章 · 獲贊 68 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章