描述:
假设银行利率为p%每年,你有a0元钱,希望得到a元,至少需要多久?设初始日期为2016-01-01,写一个方法,以”yyyy-mm-dd”的格式返回得到a的日期。
例如:
date_nb_days(100, 101, 0.98) –> “2017-01-01” (366 days)
date_nb_days(100, 150, 2.00) –> “2035-12-26” (7299 days)
注意:银行将360天视为一年,因此一天的利率应为p/36000
MyCode:
using System;
using System.Linq;
public class DateDays
{
public static string DateNbDays(double a0, double a, double p)
{
int dayCount = 0;
int year = 2016;
int month = 1;
int[] bm = { 1,3,5,7,8,10,12 };
int[] sm = { 4,6,9,11 };
while (a0 < a)
{
a0 = a0 * (1 + p / 36000);
dayCount++;
}
while (dayCount >= 366)
{
dayCount = year % 4 == 0 ? dayCount - 366 : dayCount - 365;
year++;
}
while (dayCount >= 31)
{
if (month == 2 && year % 4 == 0) dayCount -= 29;
if (month == 2 && year % 4 != 0) dayCount -= 28;
if (bm.Contains(month)) dayCount -= 31;
if (sm.Contains(month)) dayCount -= 30;
month++;
}
int day = dayCount + 1;
string retMonth = month < 10 ? "0"+month.ToString() : month.ToString();
string retDay = day < 10 ? "0"+day.ToString() : day.ToString();
return String.Format("{0}-{1}-{2}",year.ToString(),retMonth,retDay);
}
}
CodeWar:
using System;
public class DateDays
{
public static String DateNbDays(double a0, double a, double p)
{
DateTime Start = new DateTime(2016,1,1);
int days = 0;
double dayP = p / 36000;
while(a0 < a)
{
a0 *= (1 + dayP);
days++;
}
return Start.AddDays(days).ToString("yyyy-MM-dd");
}
}