求一个MFC中的C++程序,实在不知道错在哪
这个程序是一个对话中的一个按钮的触发程序的一部分。其功能是:计算利率假设银行整存整取存款不同期限的月息利率分别为:0.63%期限=1年0.66%期限=2年0.69%期限=...
这个程序是一个对话中的一个按钮的触发程序的一部分。
其功能是:
计算利率
假设银行整存整取存款不同期限的月息利率分别为:
0.63% 期限=1年
0.66% 期限=2年
0.69% 期限=3年
0.75% 期限=5年
0.84% 期限=8年
利息=本金*月息利率*12*存款年限。
现在某人手中有x元钱,请通过计算选择一种存钱方案,使得钱存入银行20年后得到的利息最多(假定银行对超过存款期限的那一部分时间不付利息)。
要求:输入本金数,输出1、2、3、5、8年的本息数,及最佳存线方案
我的程序是:
UpdateData(TRUE);
double bx1=m_bj+(m_bj*12*1*0.0063);
double bx2=m_bj+(m_bj*12*2*0.0066);
double bx3=m_bj+(m_bj*12*3*0.0069);
double bx5=m_bj+(m_bj*12*5*0.0075);
double bx8=m_bj+(m_bj*12*8*0.0084);
m_bx1.Format( "%6.2f",bx1);
m_bx2.Format( "%6.2f",bx2);
m_bx3.Format( "%6.2f",bx3);
m_bx5.Format( "%6.2f",bx5);
m_bx8.Format( "%6.2f",bx8);
int i,j,k,m,n,i1,i2,i3,i5,i8;
double w;
double max=0;
for(n=0;n<=2;n++)
for(m=0;m<=(20-8*n)/5;m++)
for(k=0;k<=(20-8*n-5*m)/3;k++)
for(j=0;j<=(20-8*n-5*m-3*k)/2;j++)
{
i=20-8*n-5*m-3*k-2*j;
w=m_bj*pow(double(1+0.0063),i)*pow(double(1+0.0066),j)*pow(double(1+0.0069),k)*pow(double(1+0.0075),m)*pow(double(1+0.0084),n);
if(w>max)
{
max=w;
i1=i;
i2=j;
i3=k;
i5=m;
i8=n;
}
}
m_result1.Format("%d",i1);
m_result2.Format("%d",i2);
m_result3.Format("%d",i3);
m_result4.Format("%d",i5);
m_result5.Format("%d",i8);
UpdateData(FALSE);
}
我用这个程序算出来的结果是 m_result1的显示值为20,其余都是0,但是答案是m_result4的显示值为4,其余为0.我实在找不出哪里出问题了,求指点 展开
其功能是:
计算利率
假设银行整存整取存款不同期限的月息利率分别为:
0.63% 期限=1年
0.66% 期限=2年
0.69% 期限=3年
0.75% 期限=5年
0.84% 期限=8年
利息=本金*月息利率*12*存款年限。
现在某人手中有x元钱,请通过计算选择一种存钱方案,使得钱存入银行20年后得到的利息最多(假定银行对超过存款期限的那一部分时间不付利息)。
要求:输入本金数,输出1、2、3、5、8年的本息数,及最佳存线方案
我的程序是:
UpdateData(TRUE);
double bx1=m_bj+(m_bj*12*1*0.0063);
double bx2=m_bj+(m_bj*12*2*0.0066);
double bx3=m_bj+(m_bj*12*3*0.0069);
double bx5=m_bj+(m_bj*12*5*0.0075);
double bx8=m_bj+(m_bj*12*8*0.0084);
m_bx1.Format( "%6.2f",bx1);
m_bx2.Format( "%6.2f",bx2);
m_bx3.Format( "%6.2f",bx3);
m_bx5.Format( "%6.2f",bx5);
m_bx8.Format( "%6.2f",bx8);
int i,j,k,m,n,i1,i2,i3,i5,i8;
double w;
double max=0;
for(n=0;n<=2;n++)
for(m=0;m<=(20-8*n)/5;m++)
for(k=0;k<=(20-8*n-5*m)/3;k++)
for(j=0;j<=(20-8*n-5*m-3*k)/2;j++)
{
i=20-8*n-5*m-3*k-2*j;
w=m_bj*pow(double(1+0.0063),i)*pow(double(1+0.0066),j)*pow(double(1+0.0069),k)*pow(double(1+0.0075),m)*pow(double(1+0.0084),n);
if(w>max)
{
max=w;
i1=i;
i2=j;
i3=k;
i5=m;
i8=n;
}
}
m_result1.Format("%d",i1);
m_result2.Format("%d",i2);
m_result3.Format("%d",i3);
m_result4.Format("%d",i5);
m_result5.Format("%d",i8);
UpdateData(FALSE);
}
我用这个程序算出来的结果是 m_result1的显示值为20,其余都是0,但是答案是m_result4的显示值为4,其余为0.我实在找不出哪里出问题了,求指点 展开
1个回答
展开全部
w=m_bj*pow(double(1+0.0063),i)*pow(double(1+0.0066),j)*pow(double(1+0.0069),k)*pow(double(1+0.0075),m)*pow(double(1+0.0084),n);
w的算法不对。
pow(double(1+0.0066),j),这里1+0.0066可不是j对应的2年期中,整两年的利息,而是一个月的利息。
因此pow的五个基数,分别应该是:
double bx1=1+(12*1*0.0063);
double bx2=1+(12*2*0.0066);
double bx3=1+(12*3*0.0069);
double bx5=1+(12*5*0.0075);
double bx8=1+(12*8*0.0084);
w=m_bj*pow(bx1,i)*pow(bx2,j)*pow(bx3,k)*pow(bx5,m)*pow(bx8,n);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询