从键盘整数获取x,y 然后执行以下操作 x=y^x , y=x 其中 x 是初始值 不使用其他变量打印结果(仅允许 x 和 y)
我用LOG来做这件事并且它有效,但老师想要一种更简单的方法来做到这一点(简单的数学)。
X=3 Y=4
64 3
您可以根据您的要求尝试以下程序。
#include <cstdio>
#include <cmath>
int main(){
double x = 3;
double y = 4;
printf("y power x is = %lf\n", pow(y,x));
y=x;
printf("%lf", y);
}
y power x is = 64.000000
3.000000
我认为
x,y
足够小,不会溢出整数结果x,y
是非负数(如果是负数,你也需要处理)int
是 32 位整数我会使用for循环...
for
很简单,但你需要有迭代和结果变量x,y
x,y
限制为 16 位... <0,65535>
0x0000FFFF*0x0000FFFF=0xFFFE0001
x<=2
或|y|<=1
的情况,所有其他情况都可以x,y
,上部为i,z
在源代码中它看起来像这样(如果您想自己编写代码,请不要阅读):
// for (z=1,i=0 ; i < x ;i++ ) z*=y;
for (y|=0x00010000;int(x>>16)<int(x&0x0000FFFF);x+=0x00010000) y=((int(y>>16)*int(y&0x0000FFFF))<<16)|int(y&0x0000FFFF);
// y=x;
y=int(y&0xFFFF0000)|int(x&0x0000FFFF);
// x=z; free i
x=int(y>>16);
// free z
y&=0x0000FFFF;
[备注]
if (int(y&0x00008000)) y|=0xFFFF0000;
y
符号位进行异或)...y
符号和 x
零位(奇/偶)计算结果符号 z
是整数,那么指数x
不应该是负数...