- 论坛徽章:
- 0
|
http://bbs.chinaunix.net/thread-1001379-1-1.html (求《c和指针》一道题的最优解(声明非作业帖))
对上主题中的 #19楼和#20楼 的程序做了3次对比测试,执行效率相差很大!如下:
第一次 第二次 第三次
#19楼程序 46秒 50秒 46秒
#20楼程序 77秒 69秒 73秒
下面是两个程序的测试版代码,不知这样测试是否合理?
#19楼程序的测试代码:
#include<stdio.h>
#include<string.h>
#include<time.h>
int main()
{
int i, len, n1, n2;
char buf[2][15] = {0};
time_t t1,t2;
//scanf("%s", buf[0]);
strcpy(buf[0], "1024555");
t1=time(NULL);
for(int k=0; k<100000; k++)
{
len = strlen(buf[0]);
if(1 == len)
{
printf("\t$0.0%s",buf[0]);
}else if( 2 == len)
{
printf("\t$0.%s",buf[0]);
}else
{
n1 = (len-2)/3;
n2 = (len-2)%3;
if(0==n1)
{
buf[1][n2]='.';
}else
{
if( n2>0 )
buf[1][n2]=',';
for(i=1; i<n1; i++)
buf[1][n2+i*3]=',';
buf[1][n2+i*3]='.';
}
printf("\t$");
for(i=0; i<len; i++)
{
if(buf[1][i] != 0 )
putchar(buf[1][i]);
putchar(buf[0][i]);
}
}
printf("\n");
}
t2=time(NULL);
printf("secdiff = %d\n", t2-t1);
return 0;
} |
#20楼程序的测试代码:
#include<stdio.h>
#include<string.h>
#include<time.h>
char * reverse(char *s)
{
char *p,*q,t;
p = s;
q = s + strlen(s)-1;
while(p < q)
{
t = *p;
*p++ = *q;
*q-- = t;
}
return s;
}
char * numformat(char * result,char * s)
{
char *q,*r;
r = result;
q = s + strlen(s) - 1;
if(q >= s)
*r++ = *q--;
else
*r++ = '0';
if(q>=s)
*r++ = *q--;
else
*r++ = '0';
*r++ = '.';
while(q >= s){
*r++ = *q--;
if(q < s)
break;
*r++ = *q--;
if(q < s)
break;
*r++ = *q--;
*r++ = ',';
}
if(*(r-1) == ',')
--r;
if(*(r-1) == '.')
*r++ = '0';
*r++ = '$';
*r++ = '\0';
return (reverse(result));
}
int main()
{
char constr[30];
time_t t1,t2;
t1=time(NULL);
for(int k=0; k<100000; k++)
{
puts(numformat(constr,"1024555"));
printf("\n");
}
t2=time(NULL);
printf("secdiff = %d\n", t2-t1);
return 0;
} |
|
|