배열 A가 주어지면 배열의 모든 요소를 곱해야합니다. 숫자가 10^9까지 올라갈 수 있기 때문에 제품의 0을 찾아야합니다. 나는 다음을했다 :C++ : 배열 곱셈의 후행
int ans= 0; // to count no of trailing zeroes
for(long int i =0; i<n ; i++) // n can be very large(upto 10^5)
{
long long int p=1;
p=p*a[i];
while (p2℅10 ==0)
{ ans++;
p=p/10;
}
}
2의 수를 계산하는 기능은 다음과 같다. 5의 nunber를 계산하기 위해 5를 2로 대체했습니다.
Int nm2(long long a)
{
Int b=0;
while(a℅2==0){
a=a/2;
b++;
}
return b;
}
Int p2=0,p5=0;
For(long long i=L;i<R;i++)
{
p2 += nm2(a[i]);
p5 += nm5 (a[i]);
}
Int ans += min(p2,p5); // storing no of zeroes every time I multiply elements of array from Index L to Index R of array a[].
어떻게 향상시킬 수 있습니까? 아니면 더 빠른 효율성으로 계산하는 다른 방법이 있습니다. 제발 도와주세요.
이것은 나에게 가장 효율적인 방법과 같습니다. 이동은 나누기보다 빠르지 만, 여기에서 그 이동 방법을 보지 못합니다. 나는 네가 개인적으로 그걸 못 박았다고 생각한다. 나는 다른 사람들이 말하는 것을보기를 고대한다. 좋은 질문! – allen1
FWIW, 효율성에 정말로 관심이 있다면 http://stackoverflow.com/questions/12356442/binary-divisibility-by-10; 또한 여기를 참조하십시오 : http://stackoverflow.com/questions/7070346/c-best-way-to-get-integer-division-and-remainder BTW, 그 들여 쓰기는 실제 코드에서 사용하는 것과 동일합니까? – vaxquis
@vaxquis이 방법은 길지 않을까요? long long을 이진수로 변환 한 다음 해당 비트 조작을 수행 한 다음 0을 계산합니다. ? 나는 좋지 않지만 길어진 것처럼 보인다. –