1#define _GNU_SOURCE 2#include <stdlib.h> 3#include <stdio.h> 4#include <string.h> 5 6char *fcvt(double x, int n, int *dp, int *sign) 7{ 8 char tmp[1500]; 9 int i, lz; 10 11 if (n > 1400U) n = 1400; 12 sprintf(tmp, "%.*f", n, x); 13 i = (tmp[0] == '-'); 14 if (tmp[i] == '0') lz = strspn(tmp+i+2, "0"); 15 else lz = -(int)strcspn(tmp+i, "."); 16 17 if (n<=lz) { 18 *sign = i; 19 *dp = 1; 20 if (n>14U) n = 14; 21 return "000000000000000"+14-n; 22 } 23 24 return ecvt(x, n-lz, dp, sign); 25} 26