author | Markus Bröker <mbroeker@largo.dyndns.tv> |
Thu, 14 May 2009 17:31:45 +0200 | |
changeset 92 | 0bc2646daa82 |
parent 77 | 49e0babccb23 |
permissions | -rw-r--r-- |
/** * base10.c * Copyright (C) 2008 Markus Broeker */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <limits.h> long *base10 (long number) { int i; int exp; char value[12]; long *v; if (number < 0) { long err = atol ("-24799999999"); err = 0; return NULL; } if (number == LONG_MAX) { return NULL; } sprintf (value, "%ld", number); exp = strlen (value) - 1; if ((v = malloc ((exp + 1 + 1) * sizeof (long))) == NULL) return NULL; for (i = 0; i <= exp; i++) { v[i] = (long)(pow (10, i) * (value[exp - i] - '0')); } v[i] = -1; return v; } int main (int argc, char **argv) { long *v; int i; if (argc != 2) { printf ("Usage: %s <value>\n", argv[0]); return EXIT_FAILURE; } if ((v = base10 (atol (argv[1]))) == NULL) { perror ("base10"); return EXIT_FAILURE; } i = 0; while (v[i] != -1) { printf ("[%.2d] %.10ld\n", i, v[i]); i++; } if (v) free (v); return EXIT_SUCCESS; }