整数幂函数

这篇博客介绍了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型,就这些啦,啊哈。
//这是本人第一次写博客,当时是想我这个菜鸡写什么博客,但是现在觉得写这个才能真正巩固自己所得知识吧,所以一起加油吧

### 关于计算投资收益实验中的数字类型及其操作 在编程环境中,尤其是涉及财务计算时,理解数字类型的特性和操作是非常重要的。以下是关于该主题的一些关键点: #### 1. 数字类型概述 Python 中主要支持两种数字类型:整数 (`int`) 和浮点数 (`float`)。 - **整数 (int)** 是不带小数部分的数值,例如 `5` 或 `-10`。 - **浮点数 (float)** 表示带有小数部分的数值,例如 `3.14` 或 `-0.001`。 对于金融计算而言,通常会使用浮点数来表示金额和利率等数据[^2]。 #### 2. 基本运算符 在 Python 中可以执行多种数学运算,这些运算是实现投资收益计算的核心工具: - 加法 (`+`) - 减法 (`-`) - 乘法 (`*`) - 除法 (`/`) - 幂运算 (`**`) 例如,在给定的投资收益计算中,代码片段展示了如何利用循环结构以及上述运算符完成累加和复利计算。 ```python x = 500000 # 初始投资额 y = 0 # 方案二初始累计收益 for i in range(1, 11): # 循环代表十年的时间跨度 x = x + x * 0.0315 # 复利增长公式应用于方案一 y = 18000 + y + y * 0.0175 # 租金收入加上活期利息的增长用于方案二 print(f"第{i}年方案一:{x - 500000:.2f}, 方案二:{y:.2f}") ``` 此代码实现了对两种不同投资策略下的年度累积收益比较,并通过格式化字符串输出结果以便清晰展示每一阶段的数据变化情况。 #### 3. 浮点精度问题 需要注意的是,由于计算机内部存储机制的原因,某些情况下可能会遇到浮点数精度误差的问题。虽然在此简单例子中影响不大,但在更复杂的场景下可能需要采取措施规避此类错误,比如采用专门设计用来处理货币单位精确性的库如 `decimal` 模块。 ```python from decimal import Decimal, getcontext getcontext().prec = 6 # 设置全局精度为六位有效数字 principal = Decimal('500000') # 使用字符串初始化Decimal对象避免转换过程中引入额外误差 interest_rate = Decimal('0.0315') new_amount = principal * (1 + interest_rate) ** 10 print(new_amount) ``` 以上方法能够提供更加精准的结果尤其适用于严格要求高准确度的应用场合。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值