X^Y,X和Y均为整数

题目描述:模拟实现pow(x,y),x 和 y 均为整数(0不是整数)。

思路:x,y有可能为正整数,负整数,当指数 y 为负数时,先对指数求绝对值,然后算出次方的结果再求倒数。

方法1:一步一步求解,利用循环让 x 乘 x

方法2:递归求解,简化运算。以平方为单位求解。

Java实现 

import java.util.Scanner;
public class MyPow {
    // 一步一步运算,x 一次一次的乘
    public static int pow1(int x,int y){
        int ret = 1;
        while(y-- != 0){
            ret *= x;
        }
        return ret;
    }
    // 优化方法,递归思路,如求 8 次方,知道了 4 次方再平方就能得到结果
    public static int pow2(int x,int y){
        //一定要先判断指数是否为 1,否则找不到递归出口
        if(y == 1){
            return x;
        }
        int ret = pow2(x,y>>1);
        ret *= ret;
        if(1 == (y & 1)){
            return ret * x;
        }
        return ret;
    }
    //该方法用来判断指数正负,以及在得到结果后,若指数为负则求倒数
    public static double myPow(int x,int y){
        if(y < 0){
            return 1.0/pow1(x,-y);
           // return 1.0/pow2(x,-y);
        }
        return pow1(x,y);
        //return pow2(x,y);
    }
    // 测试用例
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int x = input.nextInt();
        int y = input.nextInt();
        while(x != 0 && y != 0){
            System.out.println(myPow(x,y));
        }
        System.out.println("x,y均为整数,请重新输入!");
    }
}

运行结果 :

C实现 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int Poweruint1(int a, unsigned int ex)//低效率
{
	int ret = 1;
	//for (unsigned int i = 0; i <= ex; i++){
	//	ret *= a;
	//}
	while (ex--){
		ret *= a;
	}
	return ret;
}
int Poweruint2(int a, unsigned int n)//位运算效率比乘除法和求余运算高
{
	if (1 == n){
		return a;
	}
	int ret = Poweruint2(a, n >> 1);
	//double ret = Poweruint2(a, n/2);
	ret *= ret;
	if (1 == (n & 1)){
		ret *= a;
	}
	//if (1 == (n % 2)){
	//	ret *= a;
	//}
	return ret;
}
double Power(int base, int exponent)
{
	double result = 1.0;
	unsigned int ex = (unsigned int)exponent;
	if (exponent < 0){//指数为负数时先转化为正数
		ex = (unsigned int)(-exponent);
	}
	result = Poweruint1(base, ex);
	//result = Poweruint2(base, ex);
	if (exponent < 0){
		result = 1.0 / result;
	}
	return result;
}
int main()
{
	int x = 0;
	int y = 0;
	scanf("%d%d", &x, &y);
	printf("%f\n", Power(x, y));
	system("pause");
	return 0;
}

C语言实现数值的整数次方

### 数学运算中的指数函数及其编程实现 在数学中,`x^y` 表示的是 `x` 的 `y` 次幂。这意味着将底数 `x` 自身相乘 `y` 次。如果 `y` 是正整数,则计算方式简单明了;然而当 `y` 可能是非整数值(如分数或负数),则需要引入更复杂的定义。 #### 底数与指数的关系 对于任意实数 \( x \neq 0\) 任何实数 \( y \),\( x^y \) 定义如下[^1]: - 当 \( y \in \mathbb{Z}^{+} \): 这表示简单的重复乘法操作,即 \( x^y = x \times x \times ... \times x \)(共 \( y \) 次). - 当 \( y=0 \): 不论 \( x \) 值为何 (\( x\neq 0 \)) ,都有 \( x^0 = 1 \). - 当 \( y<0 \): 此时 \( x^{-y}=\frac{1}{x^{|y|}} \), 即取其倒数. - 对于非整数情况比如有理数或者无理数作为指数的情况, 利用自然对数来表达: 如果 \( y=p/q \) (其中 p,q 都是整数且 q>0)那么我们可以通过根号形式写成 \( x^{p/q}=({\sqrt[q]{x})^p}\). 而如果是无理数的话就需要借助极限的概念去逼近该值. #### 编程环境下的实现方法 大多数现代高级语言都提供了内置库支持这种基本算术运算: ##### 使用Python为例展示如何执行幂次方操作: ```python result = pow(x,y) # 或者直接使用 ** print(f"{x} raised to {y}: ", result) ``` 上述代码片段展示了两种不同的方式进行幂运算的方法——通过调用标准库函数pow()以及利用双星号(**)语法糖。 值得注意的是,在实际应用过程中可能会遇到精度丢失等问题特别是处理非常大的数字或者是浮点型变量参与的情况下应该格外小心考虑舍入误差等因素的影响[^2]. 另外需要注意的一点是在某些特定领域像计算机视觉当中也可能涉及到类似的变换过程只不过它们通常被封装成了更加高层级的功能模块供开发者调用而不必关心底层细节部分例如图像增强算法可能就会运用到伽马校正技术这本质上也是一种基于幂律曲线调整像素亮度分布的技术手段之一[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值