Étant donné un tableau A, je dois multiplier tous les éléments de tableau. Puisque les nombres peuvent aller jusqu'à 10^9, je dois trouver les zéros traînants du produit. J'ai fait ce qui suit:C++: Zéros de fin de multiplication de tableau
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;
}
}
La fonction permettant de calculer le nombre de 2 est la suivante. J'ai remplacé 2 par 5 pour calculer nunber de 5.
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[].
Comment puis-je l'améliorer? Ou y a-t-il d'autres façons de le calculer avec une efficacité plus rapide? Sil te plait aide moi.
Cela ressemble à la manière la plus efficace possible pour moi. Les changements sont plus rapides que les divisions, mais je ne vois pas comment exploiter cela ici. Je pense que vous l'avez cloué, personnellement, et j'ai hâte de voir ce que les autres disent. Bonne question! – allen1
FWIW, si vous êtes * vraiment * concerné par l'efficacité, http://stackoverflow.com/questions/12356442/binary-divisibility-by-10; voir aussi ici: http://stackoverflow.com/questions/7070346/c-best-way-to-get-integer-division-and-remainder BTW, est-ce l'indentation que vous utilisez dans votre code actuel? – vaxquis
@vaxquis Cette méthode ne sera-t-elle pas longue? Convertir un long long en binaire, puis ces manipulations de bits, puis en calculant le nombre de zéros. ? Je ne suis pas bon mais cela semble long. –