我在作d122題的時候一開始使用程式1的寫法,預到了TLE問題。
結果把程式改成程式2之後速度竟然快速增加,但是兩個程式的邏輯幾乎一樣,僅有一行不同
想請問大大們為何時間會有如此大的差異,一直想不出原因
程式1 結果->TLE(1s)
#include<iostream>
using namespace std;
main(){
long int n,t,s;
while(cin>>n){
t=5;
s=0; //作為存放0次數的數值
while(t<=n){
s+=n/t; //依序判斷5^1,5^2,..... 有多少個5的倍數
t*=5;
}
cout<<s<<endl;
}
}
程式2 結果->AC(0ms,480KB)
#include<iostream>
using namespace std;
main(){
long int n,t,s;
while(cin>>n){
t=5;
s=0;
while(t<=n){
s+=n/t; //改成都除以5 (t=5)
n/=5;
}
cout<<s<<endl;
}
}
#include<iostream>
using namespace std;
main(){
long long int n,t,s; // <===============更改
while(cin>>n){
t=5;
s=0; //作為存放0次數的數值
while(t<=n){
s+=n/t; //依序判斷5^1,5^2,..... 有多少個5的倍數
t*=5;
}
cout<<s<<endl;
}
}
AC(0ms, 288KB)
應該是*5的時候範圍爆掉了
把它改成更大的空間就AC了