当前位置: 代码迷 >> C语言 >> 大家来讨论:^_^ ,两个程序
  详细解决方案

大家来讨论:^_^ ,两个程序

热度:89   发布时间:2007-04-12 18:32:48.0
运行过程都一样呀~``
结果也一样
----------------解决方案--------------------------------------------------------

是3000


----------------解决方案--------------------------------------------------------
TC下整数为16位,最大就32767,第二种做法整数已经溢出了.
----------------解决方案--------------------------------------------------------

我做的结果也不一样啊,我做了个查错的程序,发觉楼上的兄弟说的有道理
main( )
{ int a,b,c,d,ii,i1,i2;
char e1[3005],e2[3005];
for (ii=0;ii<=3005;ii++)
{
e1[ii]='0';
e2[ii]='0';
}

i1=0; i2=0;
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
for(d=0;d<=9;d++)
{
if((a*10000+b*1000+c*100+d*10+6)%3==0)
{ i1++;
e1[i1]=a+b+c+d;
if(i1==760) printf("\n%d%d%d%d\n",a,b,c,d);
}
if ((a+b+c+d+6)%3==0)
{ i2++;
e2[i2]=a+b+c+d;
if(i2==760) printf("\n%d%d%d%d\n",a,b,c,d);
}

}
for (ii=0;ii<=3005;ii++)
{
if(e1[ii]==e2[ii]) continue;
else
{
printf("\n%d,,,,,%d,,,,,,,%d\n",e1[ii],e2[ii],ii);
break;
}
}

printf("\n%d%d\n",i1,i2);
}


----------------解决方案--------------------------------------------------------
第二种方法是有问题的,当精度不够时溢出,a*10000+b*1000+c*100+d*10+6这个表达式出现异常,会归零的,0%3==0,所以会出现上面不等的情况,这只是我个人看法.
----------------解决方案--------------------------------------------------------
第2中方法有点问题
定义的时候 int 类型是16位的 表示的数范围 -32768到37267
a*10000+b*1000+c*100+d*10+6 早就超出了范围 就会出错了 具体怎么出错偶也不知道 :(

把 long int 定义就没问题了 结果是3000
----------------解决方案--------------------------------------------------------

表达式(a*10000+b*1000+c*100+d*10+6)的值在0-32767是没问题的,当表达式的值为32768是就变成-32768了,溢出了,所了原本为32776这个不能被3整除的数,就变成了-32760就应该能被整除了,原本不能被3整除的98306现在由于以上原因变成了-32766了而正常情况下应该是98316被3整除的,用(98316-32796)+32776=98296,多出来的1就是在98306这,说的有些罗嗦了,希望高手指正.


----------------解决方案--------------------------------------------------------
  相关解决方案