问题标题: 2002题 5和0的统计为什么错了?

1
0
已解决
吴知玄
吴知玄
新手光能
新手光能

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    int n,max=0;
    cin>>n;
    if(n%10==5)
    {
        for(int i=1;i<=n;i++)
        {
            
            if(n%5==0)
            {
                n/=5;
                max++;
            }
            else
            {
                break;
            }
        }
    }
    else
    {
        for(int i=1;i<=n;i++)
        {
            int j=1;
            j*=10;
            if(n%j==0)
            {
                max++;
            }
        }
    }
    cout<<max;
    return 0;
}

//为什么错了?

吴知玄在2018-01-13 22:50:03追加了内容

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    int n,max=0;
    cin>>n;
    if(n%10==5)
    {
        for(int i=1;i<=n;i++)
        {
            
            if(n%5==0)
            {
                n/=5;
                max++;
            }
            else
            {
                break;
            }
        }
    }
    else
    {
        for(int i=1;i<=n;i++)
        {
            int j=1;
            j*=10;
            if(n%j==0)
            {
                max++;
            }
        }
    }
    cout<<max;
    return 0;
}

为什么错了?


-1
已采纳
刘斐
刘斐
高级守护
高级守护
if(n%10==5)
    {
        int count=0;
        while(n%5==0)
        {
            n/=5;
            count++;    
        }
        cout<<count;
    }
    else 
    {
        int count=0;
        while(n!=0)
        {
            if(n%10==0)
            {
                count++;    
            }
            n/=10;
        }
        cout<<count;
    }

这是核心部分,你就是这部分错了,其他就是输入了!

1
朱宗晔
朱宗晔
初级光能
初级光能

 核心部分

sprintf(a,"%d",n);
	if(a[strlen(a) - 1] == '5'){
		while(n % 5 == 0){
			ans ++;
			n /= 5;
		}
		cout << ans << endl;
	}
	else{
		for(int i = 0;i <= strlen(a) - 1;i ++){
			if(a[i] == '0') ans ++;
		}
		cout << ans << endl;
	}

 

朱宗晔在2018-01-14 08:55:03追加了内容

@吴之玄

你的0的错误是:

int j = 1;

   j *= 10;

 

这样子,每一次循环,j都是1 * 10.

解决方法:把

int j = 1;

放到循环外面

0
0
吴知玄
吴知玄
新手光能
新手光能

不知道为什么0的统计是错的?

0
梁锦程
梁锦程
高级光能
高级光能
if (n%10==5) 
    {
        int s=0;
        while (n%10==5 || n%10==0) 
        {
            s++;
            n/=5;
        }
        cout<<s<<endl;
    } 
    else 
    {
        while (n!=0)
        {
            int s=100;
            s=n%10;
            n/=10;
            if (s==0) t++;
        }
        cout<<t<<endl;
    }
0
王祥润
王祥润
新手守护
新手守护

核心部分

 

 

sprintf(a,"%d",n);

 

if(a[strlen(a) - 1] == '5'){

 

while(n % 5 == 0){

 

ans ++;

 

n /= 5;

 

}

 

cout << ans << endl;

 

}

 

else{

 

for(int i = 0;i <= strlen(a) - 1;i ++){

 

if(a[i] == '0') ans ++;

 

}

 

cout << ans << endl;

 

}

0
0
王紫馨
王紫馨
高级守护
高级守护

吴知玄 你有没有注意数据范围?N<=100,000,000

我要回答