#9060: 乘除法的速度是一樣的嗎?


tty9981 (a)

學校 : 不指定學校
編號 : 30856
來源 : [140.113.165.208]
最後登入時間 :
2017-06-05 17:21:05
d122. Oh! My Zero!! -- liouzhou_101 | From: [123.192.192.127] | 發表日期 : 2014-08-05 13:11

我在作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;
        }
   }

 
#11629: Re:乘除法的速度是一樣的嗎?


nkavengertree (LaG)

學校 : 不指定學校
編號 : 62501
來源 : [49.216.191.28]
最後登入時間 :
2021-11-21 03:06:49
d122. Oh! My Zero!! -- liouzhou_101 | From: [163.30.20.159] | 發表日期 : 2016-12-21 08:32

#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了

 
 
ZeroJudge Forum