对于幂运算,大家经常会用到 “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型,就这些啦,啊哈。
//这是本人第一次写博客,当时是想我这个菜鸡写什么博客,但是现在觉得写这个才能真正巩固自己所得知识吧,所以一起加油吧