Új hozzászólás Aktív témák

  • pmonitor

    aktív tag

    Van ez a kód:
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <time.h>
    #include <sys/timeb.h>

    long timediff(struct timeb* start, struct timeb* end)
    {
    long seconds;
    seconds = (long)(end->time - start->time);
    start->millitm = end->millitm - start->millitm;
    if (0 > start->millitm) {
    start->millitm += 1000;
    seconds--;
    }
    return seconds;
    }

    int patoi(const char* str)
    {
    char* temp = 0, neg = 0;
    int i;
    while (isspace(*str)) str++;
    if (*str == '-')
    {
    str++;
    neg = 1;
    }
    else if (*str == '+') str++;
    while (*str == '0') str++;
    temp = str;
    while (*temp)
    {
    if (!(*temp >= '0' && *temp <= '9')) break;
    temp++;
    }
    temp--;
    i = pow(10, temp - str);
    int ret = 0;
    for (; temp >= str; str++)
    {

    if (*str >= '0' && *str <= '9')
    {
    ret += ((*str - '0') * i);
    }
    else break;
    i /= 10;
    }
    if (neg) ret *= -1;
    return ret;
    }

    int main()
    {
    char str[] = "+16258156";
    int val = 0, db = 0;
    struct timeb start, end;
    long seconds, seconds2;
    int militm, militm2;
    size_t i = 0;
    ftime(&start);
    for (i = 0; i < 1000000000; i++)
    {
    val = atoi(str);
    //printf("%d\n", val);
    //break;
    }
    ftime(&end);
    seconds = timediff(&start, &end);
    militm = start.millitm;
    ftime(&start);
    for (i = 0; i < 1000000000; i++)
    {
    val = patoi(str);
    //printf("%d\n", val);
    //break;
    }
    ftime(&end);
    seconds2 = timediff(&start, &end);
    militm2 = start.millitm;
    printf("Eltelt ido: %ld.%03d masodperc\n", seconds, militm);
    printf("Eltelt ido: %ld.%03d masodperc\n", seconds2, militm2);
    return 0;
    }

    Itt az atoi(...) stabilan 18 sec. körül, az általam készített patoi(...) stabilan 3 sec. alatt fut le. Létezik ez? Ha igen, akkor benéztem valamit? Ahogy néztem, azonos inputra azonos kimenetet ad. Vagy én lennék ilyen zseni?? :U

Új hozzászólás Aktív témák