C程序复合与简单兴趣

时间:2014-07-07 17:37:41

标签: c

我有以下程序来比较两个帐户,一个是简单的兴趣,另一个是复利,我确信我的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;
}

2 个答案:

答案 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,当使用浮点数时,这不会给你真实的结果。