读书人

。关于变量的有关问题

发布时间: 2012-05-20 16:03:12 作者: rapoo

求助。。。关于变量的问题
这是两种做法
法一:
#include<stdio.h>//求解关于存钱利益最大化的问题
#include<math.h>
#include<stdlib.h>
int main()
{
int n,i,j,k,l,m,a,b,c,d,e;
float s,max=0;
printf("输入要存的年份");
scanf("%d",&n);
for(i=0;i<=n/8;i++);
for(j=0;j<=(n-8*i)/5;j++)
for(k=0;k<=(n-8*i-5*j)/3;k++)
for(l=0;l<=(n-8*i-5*j-3*k)/2;l++)
for(m=0;m<=n-8*i-5*j-3*k-2*l;m++)
{m=n-8*i-5*j-3*k-2*l;
s=2000*pow(double (1+0.84*12*8),double (i))
*pow(double (1+0.75*12*5),double (j))
*pow(double (1+0.69*12*3),double (k))
*pow(double (1+0.66*12*2),double (l))
*pow(double (1+0.63*12),double (m));
if(max<=s)
{
max=s;a=i;b=j;c=k;d=l;e=m;
}
}
printf("要实现利益的最大化,应该按照如下方式存款:\n");
printf("8年存%d次\n5年存%d次\n3年存%d次\n2年存%d次\n1年存%d次\n",a,b,c,d,e);
system("pause");
return 0;
法二:
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{
int i8,i5,i3,i2,i1,n8,n5,n3,n2,n1;
float max=0,term;
for(i8=0;i8<3;i8++)
for(i5=0;i5<=(20-8*i8)/5;i5++)
for(i3=0;i3<=(20-8*i8-5*i5)/3;i3++)
for(i2=0;i2<=(20-8*i8-5*i5-3*i3)/2;i2++)
{
i1=20-8*i8-5*i5-3*i3-2*i2;
term=2000.0*pow(double (1+0.0063*12),double (i1))
*pow(double (1+0.0066*12*2),double (i2))
*pow(double (1+0.0069*12*3),double (i3))
*pow(double (1+0.0075*12*5),double (i5))
*pow(double (1+0.0084*12*8),double (i8));
if(term>max)
{
max=term;n1=i1;n2=i2;n3=i3;n5=i5;n8=i8;
}
}


printf("要实现利益的最大化,应该按照如下方式存款:\n");
printf("8年存%d次\n5年存%d次\n3年存%d次\n2年存%d次\n1年存%d次\n总计钱数为%1.2f\n",n8,n5,n3,n2,n1,term);
system("pause");
return 0;
}

两种变量不一样,两个编译都通过了,但是第一个结果错误,出现溢出的情况,高手帮帮忙。。。谢谢啦

[解决办法]
我可以肯定它不是溢出
因为你试试

C/C++ code
    int n,i,j,k,l,m,a=0,b=0,c=0,d=0,e;
[解决办法]
C/C++ code
    a=i;b=j;c=k;d=l;e=m;//在输出前赋值,可以看出,l和m的循环根本没有执行到    printf("要实现利益的最大化,应该按照如下方式存款:\n"); 

读书人网 >C语言

热点推荐