#define _GNU_SOURCE | |
#include <stdlib.h> | |
#include <stdio.h> | |
#include <string.h> | |
char *fcvt(double x, int n, int *dp, int *sign) | |
{ | |
char tmp[1500]; | |
int i, lz; | |
if (n > 1400U) n = 1400; | |
sprintf(tmp, "%.*f", n, x); | |
i = (tmp[0] == '-'); | |
if (tmp[i] == '0') lz = strspn(tmp+i+2, "0"); | |
else lz = -(int)strcspn(tmp+i, "."); | |
if (n<=lz) { | |
*sign = i; | |
*dp = 1; | |
if (n>14U) n = 14; | |
return "000000000000000"+14-n; | |
} | |
return ecvt(x, n-lz, dp, sign); | |
} |