杭电acm水题2089,不知错哪了

[复制链接]
查看11 | 回复3 | 2010-12-25 13:35:24 | 显示全部楼层 |阅读模式
#include
using namespace std;
inline bool have4(int n);
inline bool have62(int n);
int is[1000010];
int main()
{

int num(0);
for(int i=0;i<=1000010;i++)
{
if(have4(i)||have62(i)) ;
else num++;
is=num;//is[n]表示从0到n有几个无0和62的数
}
int m,n;
while(scanf("%d%d",&m,&n)!=EOF)
{
if(m==0&&n==0) break;

if(m==0) {cout<<is[n]-1<<endl;}
else
cout<<is[n]-is[m-1]<<endl;
}
return 0;
}
bool have4(int n)
{
while(n)
{
if(n%10==4) return true;
n/=10;
}
return false;
}
bool have62(int n)
{
while(n)
{
if(n%10==2)
{
n/=10;
if(n%10==6) return true;
}
else
n/=10;
}
return false;
}
//我的测试结果应该是对的,不知道错哪了,提示是答案错误
http://acm.hdu.edu.cn/showproblem.php?pid=2089
啊,我的程序是对的,只不过我原来用的是C++,错了,现在用G++对了,为什么

回复

使用道具 举报

千问 | 2010-12-25 13:35:24 | 显示全部楼层
我告诉你你错的根本原因。其实你的代码是有问题的。for(int i=0;i<=1000010;i++){ if(have4(i)||have62(i)) ; else num++; is=num;//is[n]表示从0到n有几个无0和62的数}数组is[]溢出,这就是c++为啥错误的原因。g++通过的原因我就不知道了,你把i<=1000010改为i<1000010,就会AC的。
回复

使用道具 举报

千问 | 2010-12-25 13:35:24 | 显示全部楼层
这题首先你理解错了。题目的意思是直到行首的数字为0才结束。这一功能似乎没有实现。其次,在它的测试case中有一个0.5,所以不能用int型的。
回复

使用道具 举报

千问 | 2010-12-25 13:35:24 | 显示全部楼层
bool have62(int n){ while(n) { if(n%10==2){ n/=10; if(n%10==6) return true;}elsen/=10; } return false;}这个错了,你看到一个2就跳到下一位,那如果是622呢?第一次碰到2,跳
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行