A : 小宋银行的贷款漏洞 2021-01-17 13:15:10
【整体思路】:
<问题中的关键点在于,当贷款时间为+∞时,贷款的利率为多少。>
贷款利率的计算方法为,利率w=a1/t;
则,年利息=x*(1+w);
1、对于贷款年限为t的情况,ans=x*(1+w)t = x*(1+a1/t)t;
2、对于贷款年限为ZERO的情况,ans=x;
3、对于贷款年限为+INF的情况,ans = x*(1+w)+∞ = x*(1+a1/t)+∞;
<在高数中有一重要极限limx→+∞(1+1/x)x = e;>
所以此时ans = limt→+∞(1+a1/t)t = limt→+∞(1+a1/t)(t/a1)*a1 = ea1
1 #include<stdio.h> 2 #include<math.h>//用到pow(a,b)函数,求a的b次方 3 int main(){ 4 int k = 1;//标识 第k组贷款 5 double e[10];//当借款时间无限期时 6 e[1] = 2.718281828459045; 7 for (int i = 2; i <= 9; i++){ 8 e[i] = pow(e[1], i); 9 } 10 int T;//输入T组数据 11 scanf("%d", &T); 12 getchar(); 13 while (T--){ 14 long x;//借款金额 15 char t[5];//借款年限 16 scanf("%ld", &x); 17 getchar(); 18 scanf("%s",&t); 19 getchar(); 20 //当借款时间为正常年限的情况 21 if (t[0]>='0' && t[0]<='9'){ 22 int j=0;//标识 t数组 23 int temp=0;//借款年限 24 double sum = x*1.0;//将整型转换为浮点型 25 while(t[j] != '\0'){ 26 temp = temp*10 + (t[j]-'0'); 27 j++; 28 } 29 double a1;//a1为x从左往右数第1个数 30 while (x>0){ 31 a1 = x%10; 32 x = x/10; 33 } 34 for(int b=1; b<=temp; b++) 35 sum = sum*(1+(a1*1.0)/temp); 36 long long loop=sum;//将浮点数转换为长整型 37 printf("#Case %d : %lld\n", k, loop); 38 } 39 //当借款年限为0时 40 if (t[0]=='Z') printf("#Case %d : %lld\n", k, x); 41 //当借款年限为+∞时 42 if (t[0]=='+'){ 43 double sum = x * 1.0;//将整型转换为浮点型 44 int a1=0;//a1为x从左往右数第1个数 45 while (x > 0){ 46 a1 = x % 10; 47 x = x / 10; 48 } 49 long long loop = sum*e[a1]; 50 printf("#Case %d : %lld\n", k,loop); 51 } 52 k++; 53 } 54 return 0; 55 }