整数幂函数

这篇博客介绍了C语言中如何实现整数幂运算的函数`long long pow(int a, int b)`,针对`math.h`库中`pow()`函数不能处理整型幂运算的局限。博主通过递归方式实现了一个计算整数幂的函数,并给出了代码示例及解释,包括函数调用过程中的实参和形参区别,以及返回值类型匹配的原则。同时,提供了样例输入和输出,帮助读者理解函数的使用。
摘要由CSDN通过智能技术生成

对于幂运算,大家经常会用到 “math.h” 里的一个函数 “double pow(double, double)” ,但这个函数也有其局限之处。这种局限主要体现在:它只能用于浮点数,对整型的幂运算并不能有效地解决。

比如,观察下面的程序。

for(int i=0;i<9;i++)
{
	printf("%d\n",(int)pow(10.0,i));
}
return 0;

运行之后会发现结果如下。
在这里插入图片描述

  这不是我们想要的结果!因此,我们需要有一个能够计算整数幂运算的函数。
  我们令这个函数为: “long long pow(int, int)” ,参数一个整数 a 和一个非负整数 b ,返回“ a 的 b 次幂”,只要对于测试数据而言结果正常即可。

  幂函数的设计思想也很简单: “ a 的 b 次幂” 等效于 b 个 a 相乘。请你实现这个函数。

输入
输入有多组数据,每组数据一行,每行一个整数 a 和一个非负整数 b ,其中 -100 ≤ a ≤ 100, b ≤ 100 ,测试数据保证 结果在 long long 的表示范围内。
当 b = -1 时表示输入结束。
输出
对于每组输入对应于一行输出,输出 pow(a, b) 的值。
样例输入 Copy
1 5
2 3
-1 -1
样例输出 Copy
1
8

好的不多说了,直接上代码,需要注意的地方我会标在注释处的

```c
#include <stdio.h>
long long fuc(int a,int b)
{
    long long k;//整型变量有一定的范围,这个可以自己查找,相乘之后k会超过整型范围,所以定义为长整型
    if(b==0) return 1;
    if(b==1||a==0) return a;
    if(b>1)  k=a*fuc(a,b-1);
    return k;
}
 
int main()
{
    int a,b;
    long long k;
    while (scanf("%d %d",&a,&b)!=EOF&&b!=-1)
    {
        k=fuc(a,b);
        printf("%lld\n",k);
    }
    return 0;
}

注:有刚开始的小白不懂函数调用,当时也把我给搞混了(当然我也是一个小白哈),我在main()函数调用fuc()时,主函数里写的时fuc(a,b)代表将a,b的值传入我的调用函数中去,但在主函数中,a,b的值是没有改变的,这个涉及到实参和形参的区别,小伙伴们可以自己去查查,调用函数fuc()开头写的是long long fuc(int a,int b),这里的a,b和主函数a,b没有任何关系,除了值相同,当然你也可以把a换成c,b换成d,这里的a就是用来接收主函数传进来的第一个数的值的,b就是用来接收第二个值的,(还有就是,fuc()中开头的a,b是没有定义的的,所以才会在他们前面加上int。
调用函数返回值时是返回k的,k正好是long long int型,所以没有异议,如果在fuc函数里定义k为int型,返回还是long long int型,为什么呢?这个是因为返回时返回的是函数接口的定义类型,也就是long long fuc(int a,int b)里的long long int 型(int是可以省略的哈),然后主函数也可以定义一个变量来把调用函数返回值赋给该变量,而该变量需要与函数接口类型一致,也是long long int型,就这些啦,啊哈。
//这是本人第一次写博客,当时是想我这个菜鸡写什么博客,但是现在觉得写这个才能真正巩固自己所得知识吧,所以一起加油吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值