这两个程序哪里不一样,C++求的都是一样的,但结果不一样?

来源:百度知道 编辑:UC知道 时间:2024/06/01 20:25:49
#include<iostream>
using namespace std;
int main()
{
int i;
int count=0;
for(i=10006;i<99999;i+=10)
if((i%3)==0)
count++;
cout<<count<<endl;
return 0;
}
结果为6000
#include<stdio.h>
int main()
{
long int i;
int count=0; /*count:统计满足条件的五位数的个数*/
for(i=1000;i<9999;i++)
if(!((i*10+6)%3)) /*判断所选的数能否被3整除*/
count++; /*若满足条件则计数*/
printf("count=%d\n",count);
return 0;
}
结果为2999;

问题:个位数为6且能被3整除的五位数共有多少?
答案应该为2999.也就是说下面的程序对的,可是这两个程序应该是一样的,哪里错了?

答案为3000
上边的程序是结果是3000
是对的

下边的程序才是错的

下边的程序算法上有漏洞

少算了一个99996
不信你输出一下所有的结果看看
下边的程序到99966结束了
还有一个99996

第一个:
for(i=10006;i<99999;i+=10)
i为10006到99999(实际上是34463,因为int型为-65536到+65535)之间的符合条件的,
第二个:
for(i=1000;i<9999;i++)
i为1000到9999之间的符合条件的
结果当然会不一样了.

在我机子上第一个程序结果是3000,不是6000.
3000应该是正确答案.
第二个程序里面,i<9999不对,这样99996你就没判断了,应该是i<10000

汗,两个if语句条件不一样啊!
第一个if语句的意思是能被3整除的个数第二个if语句的意思是不能被3整除的。。
要修改的话就把第二个if语句的条件里的“!”去掉再在后面加个“=0”就可以了。