不使用乘法或除法运算符。 您只能使用添加/减法运算符。你将如何在C中实现pow(a,b)?条件如下 -
0
A
回答
9
一个毫无意义的问题,但可以解决的,对数的性质:
pow(a,b) = exp(b * log(a))
= exp(exp(log(b) + log(log(a)))
小心,以确保您的指数函数和对数函数使用相同的基础。
是的,我知道如何使用滑尺。学习这个技巧会改变你对数的观点。
4
如果它们是整数,则很容易将pow(a,b)转换为a的b乘法运算。
pow(a, b) = a * a * a * a ... ; // do this b times
和简单的把一个*一成增加
a * a = a + a + a + a + ... ; // do this a times
如果将它们结合起来,可以使战俘。
首先,制作mult(int a,int b),然后用它来制作pow。
2
递归解决方案:
#include<stdio.h>
int multiplication(int a1, int b1)
{
if(b1)
return (a1 + multiplication(a1, b1-1));
else
return 0;
}
int pow(int a, int b)
{
if(b)
return multiplication(a, pow(a, b-1));
else
return 1;
}
int main()
{
printf("\n %d", pow(5, 4));
}
0
你已经得到答案纯粹的FP和纯粹的整数。下面是一个FP数字升至一个整数的功率:
double power(double x, int y) {
double z = 1.0;
while (y > 0) {
while (!(y&1)) {
y >>= 2;
x *= x;
}
--y;
z = x * z;
}
return z;
}
目前这使用乘法。您可以仅使用位移,几比较和添加来实现乘法。对于整数它看起来像这样:
int mul(int x, int y) {
int result = 0;
while (y) {
if (y&1)
result += x;
x <<= 1;
y >>= 1;
}
return result;
}
浮点几乎是相同的,除了你必须正常化的结果 - 即,在本质上,一个浮点数1)尾数表示为(通常相当大)的整数,以及2)比例因子。如果你想产生正常的IEEE浮点数,一些部分会变得有点丑陋 - 例如,比例因子被存储为一个“偏差”数,而不是任何通常的1的补码,2的补码等,所以与它一起工作是笨拙的(基本上,每个操作你减去偏见,做操作,检查溢出,并且(假设它没有溢出)重新加上偏差)。
做这项工作时没有任何一种逻辑测试听起来(对我而言),因为它可能并非真正意图。对于不少计算机体系结构类,将问题简化为可以直接用硬件表示的原始操作(例如,位移,按位--, - OR
和 - NOT
等),上述实现非常合适(如果你想获得技术,一个加法器需要几个门,但是VHDL,Verilog等,但它包含在VHDL和Verilog等东西中)。
相关问题
- 1. 用a * pow(b,N)替换a * b ** N
- 2. 如何实现动态WHERE LIKE%A%B%
- 3. 如何在js中将字符串('a | b \\ | c')拆分为数组('a','b | c'')?
- 4. SQL条件:(A = B AND C LIKE%D%)或(A LIKE%B%和C = D)
- 5. 从{a-b,b-c,c-a}改变为{(a,b),(b,c),(c,a)}?
- 6. 如何写A :: B :: C => D给定A :: B :: C和(A,B,C)=> D?
- 7. 如何在C#中编写exp(a/b)?
- 8. Restrictions.Disjunction()条件A和条件B或条件C及条件d
- 9. \ b如何实现?
- 10. 为什么a + = b * pow(10,c-i-1)== 99 C++?
- 11. 如何在Scala中从a => b => c获取(a,b)=> c?
- 12. 如何将字符串转换为数组“a,b,c”=>“a”,“b”,“c”?
- 13. 将C代码转换为R代码:解析以将R中的C函数(pow(a,b)更改为^ b)
- 14. 为条件执行MCDC(A && B && C)|| D
- 15. 我想从['a','b','c']将python列表变成['a','a','b',b','c','c']
- 16. 发现((A + B)/ C)模m
- 17. PHP变换阵列'a','b','c'到'a/b/c','a/b','a'
- 18. 如何查询:在类A,B和C
- 19. a + b如何不等于b + a?
- 20. 如何实现double Pow(double base,double ex)
- 21. 只留下给定列表中未重复的元素。例如:(a b a a a c)给了我们(a b)
- 22. 语句a = a^b如何在C++中工作?
- 23. 你将如何在PHP 5.4中实现基本的文件上传进度条?
- 24. [b] [b = a,0]如何在a和b之间交换?
- 25. SqlAlchemy如何查询列A == a和B == b和A == b和B == a
- 26. 如何将A * A std ::数组拆分为B * B的块?
- 27. 如何计算24a + 36b的funct(a,b)给出哪些在函数实现中执行a + b的帮助?
- 28. 实体框架:将实体A链接到现有实体B
- 29. a = b || c在Python中
- 30. Tcl [list a b c] vs {a b c}有什么区别,在什么情况下?
什么,没有比较运营商? – bdonlan 2011-02-13 16:12:22
赋值运算符怎么样?该操作员可以使用吗? – 2011-02-13 16:12:53
“如何在不使用乘法或除法运算符的情况下在C中实现pow(a,b)”?我不会。 – 2011-02-13 16:16:40