有人知道真正的算法吗?
谭浩强《C语言程序设计》(第四版)第三章的习题,原题是:购房贷款:300000,每月还款:6000,银行的利率是:1%,问多少个月还完。并提示给出公式:m = (log(p) - log(p - d * r)) / log(1 + r);对原题编写程序执行没有问题,68.7个月还完。我稍加改动就出问题了,程序如下:#include <stdio.h>
#include <math.h>
int main()
{
int d,p; // d为贷款数额,p为每月还款数额
float m,r; // r为银行贷款利率
printf("请输入贷款数额:");
scanf("%d",&d);
getchar();
printf("请输入准备每月还款额度:");
scanf("%d",&p);
getchar();
printf("请输入当前银行的贷款利率:");
scanf("%f",&r);
getchar();
m = (log(p) - log(p - d * r)) / log(1 + r);
/* printf("按上面的公式,每月至少得还款:");
printf("%f\n",d * r);
*/
printf("贷款%d元,每月还款%d,需要%.1f个月还完\n",d,p,m);
}
请教:有人知道,真正的还款公式吗?
每月至少得还款 46640元,我想没有多少人能够买得起房,因此,我认定给出的计算公式不正确,至少是不完全正确 本帖最后由 风过无痕1989 于 2020-8-10 08:13 编辑
风过无痕1989 发表于 2020-8-10 00:53
每月至少得还款 46640元,我想没有多少人能够买得起房,因此,我认定给出的计算公式不正确,至少是不完全正 ...
下面的等额还款公式,对吗?
#include <stdio.h>
#include <math.h>
int main()
{
int d,p; // d为贷款数额,p为每月还款数额
float m,r; // r为银行贷款利率
printf("请输入贷款数额:");
scanf("%d",&d);
getchar();
printf("请输入准备每月还款额度:");
scanf("%d",&p);
getchar();
printf("请输入当前银行的贷款利率:");
scanf("%f",&r);
getchar();
m = d / (p - d * r / 12); // 等额本金的算法
printf("贷款%d元,每月还款%d,需要%.1f个月还完\n",d,p,m);
}
这是在网上搜的公式,等额本金还款,按百度百科的说法:等额本金还款法在贷款初期月还款额大,此后逐月递减(月递减额=月还本金×月利率)。不管采取哪种贷款还款方式,银行都没有做吃亏的买卖、客户也不存在节省利息支出的实惠。原计算公式是:m = d / (p - (d - s) * r / 12); s为已还款累计,12是将年利息转为月利息。
按这个计算公式:贷款80万,每月还6800元,需要274.6个月还完。
等额本息的公式:(1 + r / 12) ^ m =12 * p / ((12 * p) - d * r),我化简到这一步,然后取对数,由于年代久远,取对数这一步,我真不记得该怎么做了,请帮我。
公式我觉得应该是对的,虽然我也不是很确定,你错误的原因是因为log这个函数,log()表达式里的数字必须要大于0. 而 (6800- 800000*0.0583)明显小于0啊{:10_257:} 结果就是每个月还得钱还不够利息得,永远还不清 Justin1 发表于 2020-8-10 08:00
公式我觉得应该是对的,虽然我也不是很确定,你错误的原因是因为log这个函数,log()表达式里的数字必须要 ...
所以呀,0和负数没有对数,就得加大每月还款的数额,每月得还46600多呀 公式应该没问题,log函数里要大于0,p - d *r要确保他大于0,不能乱输入啊{:10_277:}
可以加个if判断,如果p - d * r 小于等于0, 退出程序或重新输入
log函数定义可以参考:https://blog.csdn.net/weixin_37609825/article/details/79850874 大哥 可能是我没看懂你d*r求的是啥 算出来的是每月还款吗… 拖延症大叔 发表于 2020-8-10 18:28
大哥 可能是我没看懂你d*r求的是啥 算出来的是每月还款吗…
你看懂了,d*r 实际上是每年的还款。这还得怪书中出题时,没有明确 巴巴鲁 发表于 2020-8-10 09:22
公式应该没问题,log函数里要大于0,p - d *r要确保他大于0,不能乱输入啊
可以加个if判断, ...
你的意见很好,按你的意见,我修改了程序,已经完美地解决了问题,见下帖 本帖最后由 风过无痕1989 于 2020-8-10 20:17 编辑
// 房贷问题,题目出自于谭浩强《C语言程序设计》第四版第三章习题
#include <stdio.h>
#include <math.h>
int main()
{
int d,n,p; // d为贷款数额,p为每月还款数额
float m1,m2,r; // r为银行贷款年利率
printf("请输入贷款数额:");
scanf("%d",&d);
getchar();
printf("请输入当前银行的贷款利率:");
scanf("%f",&r);
getchar();
printf("请输入准备每月还款额度:");
L: scanf("%d",&p);
getchar();
n = p - d * r / 12;
if(n <= 0)
{
p = d * r / 12;
printf("你需要提高每月的还款数额,至少每月得还款%d元",p);
goto L;
}
m1 = (log(p) - log(p - d * r / 12)) / log(1 + r / 12); // 等额本息的算法
m2 = d / (p - d * r / 12); // 等额本金的算法
printf("贷款%d元,每月等额本息还款%d,需要%.1f个月还完\n",d,p,m1);
printf("贷款%d元,每月等额本金还款%d,需要%.1f个月还完\n",d,p,m2);
}
页:
[1]