面试题&笔试题:求1+x+x^2+x^3+...+x^n的和(尽可能少的使用乘法运算)
来源:互联网 发布:网络中介怎么做的 编辑:程序博客网 时间:2024/06/02 07:40
题目:求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;}运行结果截图:
0 0
- 面试题&笔试题:求1+x+x^2+x^3+...+x^n的和(尽可能少的使用乘法运算)
- x^1 + x ^2 +...+x ^n = m 求x
- 输入x和n,求x的n次方
- 简单详解:x^6+4x^4+2x^3+x+1 至少要需要多少次乘法? (某公司实习生招聘笔试试题)
- @1x @2x和@3x.png 的区别
- 1^x + 2 ^ x + 3 ^x + …… + n^x
- 求X的N次方
- 求x的n次方
- 给定整数x,定义函数A(n)=1+x+x2+x3+…+xn(n为整数且n>=0).已知乘运算的时间远大于加运算,输入x,n;如何尽可能快的求出A(n)?
- (二分法)求X的N次方
- x&(x-1)和x&(-x)的讲解
- 求x的n次幂算法Pow(x, n)
- Pow(x,n) x的n次方
- HDU_1141 求n! <= 2^x,最大的n
- 求x的n次幂
- c++ 求x的n次方
- 编写函数求x的n次方
- 快速幂求x的n次方
- 面向对象程序设计上机练习五(类和对象)
- CF 题目集锦 PART 6 # 265 div 1 C
- 汇编中防止除法溢出
- 远程仓库
- 野指针
- 面试题&笔试题:求1+x+x^2+x^3+...+x^n的和(尽可能少的使用乘法运算)
- hive大数据倾斜总结
- java Object类源代码详解
- Oracle的sys和system默认密码
- 【搜索】 HDU 1664 Different Digits
- cas入门之二十九:cas 集群简介
- 关于覆盖BIN来升级client的问题
- 函数的使用——根据传入的值,打印出相应的矩形。
- 关于Token的简要理解