C 语言数组(初级) - 我的输出与答案不同

Array in C (Beginner) - My output are different from the answer

提问人:NgoMinh 提问时间:11/15/2023 更新时间:11/15/2023 访问量:80

问:

我的代码没有产生所需的输出,我仍然不知道为什么。你能帮我解决这个问题吗?谢谢!

问题: 计算每月总还款额以及与固定利率抵押贷款的初始贷款金额的差额。 一个人想在河内买房,并接受了银行的固定利率抵押贷款,初始贷款金额为 m,年利率为 r%,期限为 d。每个月,买方必须支付本金和利息,具体如下: 每月固定本金支付额为m / (d * 12)。 每月利息支付将根据剩余的本金金额计算。第一个月,它将是 (m * r / 12)。 在接下来的几个月里,它将是 ((m - m / (d * 12)) * r / 12),依此类推,随着时间的推移而减少。

请编写一个程序,以初始贷款金额、固定利率和贷款期限为输入,并在屏幕上打印 d 年内的每月总还款额以及与初始贷款金额的差额。这些值应显示为四舍五入到小数点后 2 位的浮点数。

INPUT 
1000000000 0.11 10 
OUTPUT 
1554583333.33 554583333.33

这是我的解决方案,但输出与答案的最后几个数字不同

#include <stdio.h>
int main()
{
    long long int money;
    double rate;
    int year;
    
    scanf("%lld %lf %d", &money, &rate, &year);
    
    double fixed_money=money/(year*12);
    double total_money=0;
    double a[year*12];

    for( int i=0; i< year*12; i++){
        a[i]= fixed_money+(money-i*fixed_money)*rate/12;
        total_money+=a[i];
    }
    
    printf("%.2lf %.2lf", total_money, total_money-money );
}

输出是:

1554583315.15 554583315.15
数组 C

评论

4赞 Some programmer dude 11/15/2023
这里不需要数组。或者根本不是一个变量。你可以做atotal_money += fixed_money+(money-i*fixed_money)*rate/12;
7赞 Some programmer dude 11/15/2023
作为有关该问题的可能提示,请记住这是一个整数运算。除法不会给你任何小数。更改为以解决此问题。money/(year*12)1212.0
0赞 Barmar 11/15/2023
@ScottHunter 问题的最后一行似乎是他们的实际产出。预期的输出位于代码之前。
1赞 Weather Vane 11/15/2023
固定整数除法可得到正确答案。
0赞 Ian Abbott 11/15/2023
解决此问题的另一种方法是将变量的类型从 更改为 并相应地更改格式字符串。moneylong long intdoublescanf

答:

3赞 chux - Reinstate Monica 11/15/2023 #1

关键问题是这是一个整数除法,因此最终输出的值为 8333333.0:money/(year*12)fixed_money

1554583315.15 554583315.15

使用 ,或类似,商为 8333333.33333...和最终输出:1.0*money/(year*12)

1554583333.33 554583333.33

然而,这也是错误的,因为每月付款需要四舍五入到最接近的美分或 8333333.33,最终输出:

1554583333.15 554583333.15