减少内存使用量,C,CodeChef

时间:2011-02-08 02:07:25

标签: c++ c memory memory-management

我正在解决这个问题:http://www.codechef.com/problems/FCTRL 我有解决方案,但是,内存使用量似乎是1.6 MB,显然,这是太多了。我不明白如何减少这种情况,因为我几乎没有持久性数据。这是我的代码:

#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语言编写的。关于如何减少内存使用的任何想法?

2 个答案:

答案 0 :(得分: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)

1.6MB的共享内存是多少?您的流程当地多少钱?只需启动链接到C标准库的进程,即使整个程序是:

,您也将使用一定量的内存。
int main(int argc, char *argv[]) {
    return 0;
}

你在哪里看到1.6MB的数字?