设为首页 加入收藏

TOP

面试题&笔试题:求1+x+x^2+x^3+...+x^n的和(尽可能少的使用乘法运算)
2015-07-20 17:40:10 来源: 作者: 【 】 浏览:2
Tags:试题 & ... 的和 尽可能 使用 乘法 运算

题目:求1+x+x^2+x^3+...+x^n的和(尽可能少的使用乘法运算)。

分析:可以使用折半的方式,每次计算两个的和,比如首先计算出1+x的值保存,然后用保存的这个值乘以x^2可以得到后面两项的值再保存,依次类推直到计算结束。需要注意的是如果n是奇数或者偶数的情况是不同的,当n为奇数的时候就完全按照前面的方法计算即可,但是n为偶数的时候比较麻烦,因为最后一项的计算比较困难,所以当n为偶数的时候首先计算x+x^2的值,然后用这个和来作为迭代的基础,剩余的1最后再加到和里面,这样相当于把最后一项替换为1,这样计算简便不少。这样处理之后需要做的乘法的次数大约为n/2次。

程序的代码如下:

#include 
  
   

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;
}
  
运行结果截图:

\


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇CF 题目集锦 PART 7 #264 div 2 E 下一篇KMP子串搜索算法C语言实现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·python数据分析岗的 (2025-12-25 10:02:21)
·python做数据分析需 (2025-12-25 10:02:19)
·成为一个优秀的pytho (2025-12-25 10:02:16)
·Java后端面试实习自 (2025-12-25 09:24:21)
·Java LTS版本有哪些 (2025-12-25 09:24:18)