我有以下程序来比较两个帐户,一个是简单的兴趣,另一个是复利,我确信我的21.47亿年的结果是错误的,所以有人可能会向我指出错误吗?
#include <stdio.h>
int main(void) {
int simp_acct = 100, comp_acct = 100, years;
simp_acct += 10; /*simple interest*/
comp_acct *= .05; /*compound interest*/
while(comp_acct < simp_acct) {
simp_acct += 10;
comp_acct *= .05;
years++;
}
printf("Compound interest at .05%% beats simple interest at 10%% ");
printf("after %d years.\n", years);
return 0;
}
答案 0 :(得分:2)
将变量更改为float
:
float simp_acct = 100, comp_acct = 100, years;
否则,当您乘以分数时,您的值将四舍五入为整数。
您还需要修复复利计算公式,它应该是:
comp_acct *= 1.05;
您只是将comp_acct
设置为兴趣,并失去原则。
答案 1 :(得分:2)
#include <stdio.h>
int main() {
double simp_acct = 100, comp_acct = 100;
int years = 0;
simp_acct += 10; /*simple interest*/
comp_acct *= 1.05; /*compound interest*/
while(comp_acct < simp_acct) {
simp_acct += 10;
comp_acct *= 1.05;
years++;
}
printf("Compound interest at .05%% beats simple interest at 10%% ");
printf("after %d years.\n", years);
return 0;
}
这是工作代码。首先,如果你继续乘以0.05
,你实际上减少了数字,增加10就增加了它。会发生什么是simple_acct
只是溢出并满足条件,因为comp_acct
在某个时刻变为零。其次,你使用int
,当使用浮点数时,这不会给你真实的结果。