2011-02-08 78 views
1

我在做這個問題:http://www.codechef.com/problems/FCTRL 我有解決方案,但是,內存使用情況出現爲1.6 MB,顯然,這太多了。我不明白如何減少這種情況,因爲我幾乎沒有持久數據。這是我的代碼:減少內存使用量,C,CodeChef

#include <stdio.h> 
#include <math.h> 


int maxPower(long x) { 
     int i; 
     for(i = 0; i<= 100; i++) { 
       long myPower = pow(5,i); 
       if(myPower > x) { 
         return (i-1); 
       } 
     } 
} 

int main (void) { 
     int lines; 

     scanf("%d", &lines); 

     int i; 
     for(i = 0; i<lines; i++) { 
       long temp; 
       scanf("%ld", &temp); 
       int five_counter = 0; 
       int myPower = maxPower(temp); 
       int power; 
       for(power = 1; power<=myPower; power++) { 
         five_counter += floor(temp/((int)(pow(5,power)))); 
       } 

       printf("%d\n", five_counter); 
       five_counter = 0; 
     } 
} 

正如你所看到的,它用C編寫的。關於如何減少內存使用的任何想法?

+0

我對此可能完全錯誤,但是如果您將變量聲明移到循環之外,它會有所作爲嗎? – WildCrustacean 2011-02-08 02:12:51

+0

他們被推入堆棧,然後在每次迭代的開始和結束時彈出。這可能會使其「執行較慢」,但不會增加或減少內存使用量。 – Marlon 2011-02-08 02:14:54

回答

0

這是我提出和被接受

#include<stdio.h> 
int main() 
{ 
long n,q=0,t,c=1,result,z,m=5; 
scanf("%ld",&t); 
while(c<=t) 
{ 
scanf("%ld",&n); 
z=0; 
while(n!=0) 
{ 
q=n/m; 
z=z+q; 
n=q; 
} 
printf("%ld\n",z); 
c++; 
} 
return 0; 
} 

的主要邏輯是,沒有在階乘結束零的爲把號碼5的最高功率。

-1

1.6MB共享內存有多少?您的流程有多少本地化?只需通過啓動連接到C標準庫的過程中,您將使用一定量的內存,即使你的整個程序是:

int main(int argc, char *argv[]) { 
    return 0; 
} 

你在哪裏看到1.6MB身影?