1012 - 计算利息

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

为自行解决学费,小明勤工俭学收入10000元以1年定期存入银行,假设年利率为3.7%。利率按年计算,表示100元存1年的利息为3.7元。实际上有时提前有时推迟取,因此实际利息按天计算,1年按365天计算,因此Q天的利息是本金*3.7/100*Q/365。

在存了Q天后,1年定期利息会提高。例如存了100天后1年定期年利息提高到3.9%。如将存款提前全取出,再存1年定期。那么前面的100天只能按活期利息1.7%计算。

100天的利息和本金:10000(1+1.7/100100/365)=10046.6
再存1年定期:10046.6(1+3.9/100)=10438.4
得到的利息加本金为10438.4
如果无视利息的提高,再存1年。得到的利息加本金为(定期推迟取,利率不变)
10000
(1+3.7/100*(100+365)/365)=10471.4

题目输入

输入数据有多组,第1行为整数T,是数据的组数。每组占一行5个数,Y表示存入的本金<=100000,Q表示已存天数<=365,e表示活期利率,f表示定期利率,g表示提高后的定期利率。

题目输出

每组数据输出2行。

第1行,提前支取后再存1年所得本金和利息。

第2行,继续存1年,Q+365天后所得本金和利息。

结果保留1位小数。

输入/输出样例

输入格式

4 
10000 100 2.3 3.7 3.9
10000 100 1.7 3.7 3.9
10000 200 1.7 3.7 3.9
10000 300 1.7 3.7 3.9

输出格式

10455.5
10471.4
10438.4
10471.4
10486.8
10572.7
10535.2
10674.1

C语言解答

#include<stdio.h>

int main()
{
	int t;
	float y,q,e,f,g;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%f%f%f%f%f",&y,&q,&e,&f,&g);
		printf("%.1f\n%.1f\n",y*(1+e/100*q/365)*(1+g/100),y*(1+f/100*(q+365)/365));
	}
	return 0;
}

C++解答

#include<stdio.h>

int main()
{
        int t;
        float y,q,e,f,g;
        scanf("%d",&t);
        while(t--)
        {
                scanf("%f%f%f%f%f",&y,&q,&e,&f,&g);
                printf("%.1f\n%.1f\n",y*(1+e/100*q/365)*(1+g/100),y*(1+f/100*(q+365)/365));
        }
        return 0;
}

Java解答

import java.util.*;

public class Main{
	//n天的本金和利息
	public static float shortDay(float money,int days,float liferate,float highrate){
		float cmoney = money*(1 + liferate/100 * (float)days/365);
		String nowMoney = String.format("%.2f", cmoney);
		float a = Float.parseFloat(nowMoney);
		
		float dmoney = a*(1 + highrate/100);
		String Money = String.format("%.1f", dmoney);
		return (Float.parseFloat(Money));
	}
	public static float longDay(float money,int days,float rate){
		float cmoney = money*(1 + rate/100 * (days+365)/365);
		String nowMoney = String.format("%.1f", cmoney);
		return(Float.parseFloat(nowMoney));
	}
	
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner sc = new Scanner(System.in);
		
		int flag = sc.nextInt();
		float[] money = new float[flag];
		int[] days = new int[flag];
		float[] liferate = new float[flag];
		float[] rate = new float[flag];
		float[] highrate = new float[flag];
		float[] first = new float[flag];
		float[] last = new float[flag];
		for(int i=0;i<flag;i++){
			money[i] = sc.nextFloat();
			days[i] = sc.nextInt();
			liferate[i] = sc.nextFloat();
			rate[i] = sc.nextFloat();
			highrate[i] = sc.nextFloat();	
			
			first[i] = shortDay(money[i], days[i], liferate[i],highrate[i]);
			last[i] = longDay(money[i], days[i], rate[i]);
		}
		for(int i=0;i<flag;i++){
			System.out.println(first[i]);
			System.out.println(last[i]);
		}
		//float m = shortDay(money[0], days[0], liferate[0]);
		//System.out.println(middleDay(m, rate[0]));
	}
}

Python解答

import sys
  
for line in sys.stdin:
    data = line.split()
    if len(data) != 1:
       Y,Q,e,f,g = line.split()
       Y,Q,e,f,g = float(Y),float(Q),float(e),float(f),float(g)
       print round((e*Q/36500+1)*Y*(1+g/100),1)
       print round(Y*(1+f/100*(1+Q/365)),1)