itoa函式的奇怪問題

lt發表於2017-01-28

linux下沒有這個函式,windows是有的,在stdlib.h中宣告,但效率居然比自定義的函式還低。

#include <cstdio>
//#include <cstdlib>
#include <cstring>
#include <memory.h>
const int NN=(int)1e7;
static char d[NN+1][10];
int judge(char p[],int len)
{
    int sum=0;
    for(int i=0; i<len && sum<=10; i++)
        sum+=(p[i]-'0');

    if (sum==10)
        return 1;
    else
        return 0;
}
void itoa_(int i,char a[],int base)
{
    int i2=i;
    char b[20];
    int j=0;int len=0;
    do
    {
        b[j]=i2%base+'0';
        i2/=base;
        j++;
        len++;
    }while(i2>0);
    for(int j=0;j<len;j++)
        a[j]=b[len-1-j];
    a[len]='\0';


}
int main()
{
    char a[10];
    int cnt=0;
    for(int i=1; i<=NN; i++)
    {
        memset(a,0,10);
        itoa_(i,a,10);

        int length=strlen(a);
        for (int j=0; j<length; j++)
        {
            for(int k=1; j+k<=length; k++)
            {
                if (judge(a+j,k)==1)
                    for(int m=0; m<k; m++)
                        d[i][j+m]=1;
            }
        }
        int flag=1;

        for (int j=0; j<length; j++)
            if(d[i][j]!=1)
            {
                flag=0;
                break;
            }
        if(flag==1)
        {
            cnt++;
            //printf("%d\n",i);
        }
    }
    printf("cnt=%d\n",cnt);
}
----
--庫函式itoa
vc2010+cl p529b.cpp -O2
2.486s
vc2010+clang++ p529b.cpp -O2
連結失敗
mingw+clang++ p529b.cpp -O2
2.849s
g++ p529b.cpp -O2
2.629s
--自定義itoa_
vc2010+cl p529b.cpp -O2
 2.659
vc2010+clang++ p529b.cpp -O2
2.305s
mingw+clang++ p529b.cpp -O2
2.237s
g++ p529b.cpp -O2
2.030s



相關文章