// // sigfig -- Determine precision of given numbers. // // 26-Sep-2010 tvb www.LeapSecond.com/tools // #include #include #include // Calculate number of significant digits (precision) of given number. int sigfig (char *s) { int n; // // ignore any leading spaces // ignore a sign // any leading zeros don't count // count any decimal digits before decimal point // a decimal point doesn't count // count any decimal digits after decimal point // but trailing zeros of fractions don't count // and trailing zeros of integers don't count // n = 0; while (*s == ' ') s++; if (*s == '-' || *s == '+') s++; while (*s == '0') s++; while (*s >= '0' && *s <= '9') { s++; n++; } if (*s == '.') s++; while (*s >= '0' && *s <= '9') { s++; n++; } while (n && *--s == '0') n--; if (*s == '.') { while (n && *--s == '0') n--; } return n; } void main (int argc, char *argv[]) { char line[1000]; double x; while (fgets(line, sizeof line, stdin) != NULL) { x = atof(line); printf("%.15lf %d\n", x, sigfig(line)); } }