洛谷P1163银行贷款

看数据

一眼就知道是二分题

题目是这样的

题目描述

当一个人从银行贷款后,在一段时间内他(她)将不得不每月偿还固定的分期付款。这个问题要求计算出贷款者向银行支付的利率。假设利率按月累计。

输入格式

三个用空格隔开的正整数。

第一个整数表示贷款的原值 w0​,第二个整数表示每月支付的分期付款金额 w,第三个整数表示分期付款还清贷款所需的总月数 m。

输出格式

一个实数,表示该贷款的月利率(用百分数表示),四舍五入精确到 0.1%。

数据保证答案不超过 300.0%。

输入输出样例

输入 #1

1000 100 12

输出 #1

2.9

说明/提示

数据保证,1≤w0​,w≤2^31−1,1≤m≤3000。

直接分享给大家

#include <bits/stdc++.h>
using namespace std;

初始化,上面的是万能头文件,不爱写的可以自己改(改错了与我无关啦)

int a,b,c;
double l,r,mid;

变量定义,l,r,mid,要精确到小数点后四位

int main(){
    //主函数中的代码
}

定义主函数

cin>>a>>b>>c;

输入数据

l = 0,r = 3;

设置l,r初始值

while(l < r){
    //代码
}

循环直到找到为止

mid = (l + r) / 2;

中间数

if(r - l <= 0.0001){
	printf("%.1f",l * 100);
	return 0;
}

至于为什么是0.0001,那是因为要精确到小数点后四位,可能这个数永远找不到,只能有四舍五入的值

double s = a;
for(int i = 1;i <= c;i++){
	s = s * (1 + mid) - b;
}

​

计算当前的数据相等

if(s > 0){
	r = mid;
}else{
	    if(s < 0){
    		l = mid;
    	}else{
    		printf("%.1f",l * 100);
    		return 0;
	    }
}

判断要往前找还是往后找还是相等

return 0;

返回

以下是代码

#include <bits/stdc++.h>

using namespace std;

int a,b,c;
double l,r,mid;

int main(){
	cin>>a>>b>>c;

	l = 0,r = 3;

	while(l < r){
		mid = (l + r) / 2;
		if(r - l <= 0.0001){
			printf("%.1f",l * 100);
			return 0;
		}

		double s = a;
		for(int i = 1;i <= c;i++){
			s = s * (1 + mid) - b;
		}

		if(s > 0){
			r = mid;
		}else{
			if(s < 0){
				l = mid;
			}else{
				printf("%.1f",l * 100);
				return 0;
			}
		}
	}

	return 0;
}

点个赞吧!!!求求了!!!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值