编写时间代码使年利率翻倍
Posted
技术标签:
【中文标题】编写时间代码使年利率翻倍【英文标题】:writing a code for time to double annual interest rate 【发布时间】:2019-03-14 00:19:36 【问题描述】:我正在尝试编写一个年利率代码,让您可以输入任何金额,它会显示大约需要多少年才能使您的资金至少翻倍。给定的利率是每年 5%。问题是,它工作不正常,而且显示的数字高得离谱,比如 200 年左右。
#include <iostream>
using namespace std;
int main()
int deposit;
int counter;
cout << "Deposit an amount NO LESS than 1000." << endl;
cin >> deposit;
for (deposit ;; deposit = 1.05 * deposit)
counter = counter+1;
if (deposit >= 2 * deposit)
cout << endl;
cout << "Your money will double in "<< counter <<" years." << endl;
break;
【问题讨论】:
要押金是没有意义的。结果不会改变。 @schorsch312 几乎是真的,如果你有 0 钱,那么取决于你的看法有多积极,它需要 0 或无限的时间才能翻倍;) 如果银行同意您的意见,我会与银行商谈。 既然这看起来像是一个练习,你知道你是否可以使用对数吗?这是最好的解决方案,但如果你只是要练习循环,那就不太合适了。 @Useless nope,我自己做这个,虽然我们目前的课程是关于循环的,所以这就是我的知识范围 【参考方案1】:您可以直接计算将钱翻倍所用的时间,而不是使用循环。
金额不感兴趣,所以不需要存储金额。有趣的只是回报率。
您可以直接将其计算为log(2) / log(r)
,其中r
是回报率。例如,log(2) / log(1.05)
为您提供了将初始金额翻倍并获得 5% 回报的确切时间。
包含标准的<cmath>
标头以获取std::log()
。
#include <iostream>
#include <cmath>
int main()
double yearsToDouble = std::log(2) / std::log(1.05);
std::cout << "Your money will double in "<< yearsToDouble << " years." << std::endl;
【讨论】:
Nitpick:C++ 没有导入,也没有包。这包括标准标头cmath
。
只是检查:这对 compound 利息是否正确?
删除不必要的输入是个好主意。
您可能想要限制结果,以获得与 OP 相同的结果。 std::ceil(log(2) / log(1.05))
我目前的知识只扩展到循环和 if-else 语句,因为我是一个初学者程序员。我将如何在我的代码中实现这个对数?【参考方案2】:
要补充其他答案,这些答案在指出deposit > 2*deposit
永远不会为真(您需要第二个变量来记录初始值!)方面基本上是正确的,您的循环完全结束的唯一原因是因为@ 987654322@ 变得如此之大,以至于2*deposit
由于溢出而“环绕”。
这似乎使2*deposit
大于deposit
(逻辑上不可能——你需要修正这个比较!)虽然严格来说结果是不确定的。
显然,在 200 次左右的迭代之后,您就会遇到这种情况。
关于切换到像double
这样的浮点类型的建议,这很诱人,在这种简单的情况下可能就足够了,但作为一般规则,您应该在不需要时避免使用浮点因为它引入了复杂性和不准确性,却收效甚微。
我建议用整数便士或十分之一便士来计算。您可以通过将输入乘以 100 或 1000 来实现。然后,乘以 1.05 的增量乘法将具有舍入因子,但银行也将这样做!
【讨论】:
【参考方案3】:if (deposit >= 2 * deposit)
cout << endl;
cout << "Your money will double in "<< counter <<" years." << endl;
break;
在上述if
语句中,您期望deposit
大于或等于2 times of deposit
。仅当deposit
的值为零或小于零时才为真。
我建议您使用temp
变量来保留deposit
的输入值并继续。
【讨论】:
【参考方案4】:这一行
if (deposit >= 2 * deposit)
不会评估为true
(除非deposit
为负数或排除某些极端情况)。您可能想将其与初始值进行比较。所以在这之后:
cin >> deposit;
我会放
double initialDeposit = deposit;
然后将另一行改为
if (deposit >= 2 * initialDeposit)
【讨论】:
你说得对,我最初认为这可能是与小值有关的问题。我删除了它。【参考方案5】:使用变量来存储初始存款,以便可以将其与累积的利息金额进行比较。
for (float initdeposit = deposit;; deposit = 1.05 * deposit)
counter = counter+1;
if (deposit >= 2 * initdeposit)
cout << endl;
cout << "Your money will double in "<< counter <<" years." << endl;
break;
一个.exe
Deposit an amount NO LESS than 1000.
1000
Your money will double in 16 years.
注意:无论金额是多少,翻倍所需的时间始终相同。 :)
【讨论】:
以上是关于编写时间代码使年利率翻倍的主要内容,如果未能解决你的问题,请参考以下文章
用Python如何计算一笔定期存款10000元,一年期利率为2.25%,连本带息多少年后将翻倍?