Tôi đã làm việc này trong 24 giờ, cố gắng tối ưu hóa nó. Câu hỏi đặt ra là làm thế nào để tìm số lượng dấu 0 trong giai thừa của một số trong khoảng 10000000 và 10 triệu trường hợp thử nghiệm trong khoảng 8 giây.Cần trợ giúp câu hỏi thực hành Codechef - tìm các số 0 trong một giai thừa
Mã này là như sau:
#include<iostream>
using namespace std;
int count5(int a){
int b=0;
for(int i=a;i>0;i=i/5){
if(i%15625==0){
b=b+6;
i=i/15625;
}
if(i%3125==0){
b=b+5;
i=i/3125;
}
if(i%625==0){
b=b+4;
i=i/625;
}
if(i%125==0){
b=b+3;
i=i/125;
}
if(i%25==0){
b=b+2;
i=i/25;
}
if(i%5==0){
b++;
}
else
break;
}
return b;
}
int main(){
int l;
int n=0;
cin>>l; //no of test cases taken as input
int *T = new int[l];
for(int i=0;i<l;i++)
cin>>T[i]; //nos taken as input for the same no of test cases
for(int i=0;i<l;i++){
n=0;
for(int j=5;j<=T[i];j=j+5){
n+=count5(j); //no of trailing zeroes calculted
}
cout<<n<<endl; //no for each trialing zero printed
}
delete []T;
}
Xin hãy giúp tôi bằng cách gợi ý một cách tiếp cận mới, hoặc gợi ý một số thay đổi với trang này.
tôi muốn đề nghị thêm thẻ ngôn ngữ/nền tảng thích hợp (s) để thu hút nhiều khán giả. –
Tôi nhớ tôi đã gặp vấn đề đó trên acm.uva.es. Tôi đã không giải quyết nó sau đó, vì vậy nó là thú vị để xem các giải pháp ngay bây giờ. – Roman
Sau khi đọc giải pháp: vấn đề ngu ngốc thực sự. Nó gần như không thể giải quyết nó trong cuộc thi thực sự không biết giải pháp. – Roman