求助 c语言银行利率问题精度不对

设银行1年期定期存款年利率为2.25%,存款本金为capital元,试编程计算并输出n年后的本利之和。

(注: 目前银行活期存款的利息是按单利计息的。如果是定期存款,连本带息转入下一个存期,那么会继续计入定期的,相当于是复利。)

输入:输入一个正整数和一个实数,分别代表存款年数和存款本金。

输出:输出一个实数为n年后的本利之和,小数点后保留6位数字。

样例输入为: 2 100.0

样例输出为 :104.550625

思路是:既然是复利,直接算出1.0225的年份次方乘以本金

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>

int main() {
	float a, b,c;
	scanf("%f %f", &a, &b);
	c =  pow(1.0225,a);
	printf("%.6f", b * c);
}

算出结果少0.000004

尝试改变思路:用for循环,每过一年乘一次1.0225

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>

int main() {
	float a, b;
	scanf("%f %f", &a, &b);
	for (int i = 0; i < a; i++) {
		b = b * 1.0225;
	}
	printf("%f", b);
}

结果多了0.00004

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>

int main() {
	float a, b;
	scanf("%f %f", &a, &b);
	for (int i = 0; i < a; i++) {
		b = b * 1.0225;
		printf("%f\n", b);
	}
	printf("%f", b);
}

结果如图所示,第一遍的时候B = 102.25没问题,第二遍乘以1.0225就不对了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值