| #define _GNU_SOURCE | |
| #include <stdio.h> | |
| #include <stdlib.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 (char*)"000000000000000" + 14 - n; | |
| } | |
| return ecvt(x, n - lz, dp, sign); | |
| } |