#include <stdio.h>
#include <math.h>
void metric_prefix(int x, double *d, const char **p) {
static const char *prefixes[] = {"", "k", "M", "G"};
*p = prefixes[e];
}
void binary_prefix(int x, double *d, const char **p) {
static const char *prefixes[] = {"", "Ki", "Mi", "Gi"};
*p = prefixes[e];
}
int main() {
double d;
const char *p;
#define f(x) metric_prefix(x, &d, &p), printf("%d: %g %s\n", x, d, p)
f(999), f(1000), f(10001);
f(1000000), f(1000000000);
#define g(x) binary_prefix(x, &d, &p), printf("%d: %g %s\n", x, d, p)
g(1023), g(1024), g(1025);
g(1048576), g(1073741824);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CnZvaWQgbWV0cmljX3ByZWZpeChpbnQgeCwgZG91YmxlICpkLCBjb25zdCBjaGFyICoqcCkgewogIHN0YXRpYyBjb25zdCBjaGFyICpwcmVmaXhlc1tdID0geyIiLCAiayIsICJNIiwgIkcifTsKICBpbnQgeSA9IDEwMDAsIGUgPSBmbG9vcihsb2coeCkgLyBsb2coeSkpOwogICpkID0geCAvIHBvdyh5LCBlKTsKICAqcCA9IHByZWZpeGVzW2VdOwp9CnZvaWQgYmluYXJ5X3ByZWZpeChpbnQgeCwgZG91YmxlICpkLCBjb25zdCBjaGFyICoqcCkgewogIHN0YXRpYyBjb25zdCBjaGFyICpwcmVmaXhlc1tdID0geyIiLCAiS2kiLCAiTWkiLCAiR2kifTsKICBpbnQgeSA9IDEwMjQsIGUgPSBmbG9vcihsb2coeCkgLyBsb2coeSkpOwogICpkID0geCAvIHBvdyh5LCBlKTsKICAqcCA9IHByZWZpeGVzW2VdOwp9CmludCBtYWluKCkgewogIGRvdWJsZSBkOwogIGNvbnN0IGNoYXIgKnA7CiNkZWZpbmUgZih4KSBtZXRyaWNfcHJlZml4KHgsICZkLCAmcCksIHByaW50ZigiJWQ6ICVnICVzXG4iLCB4LCBkLCBwKQogIGYoOTk5KSwgZigxMDAwKSwgZigxMDAwMSk7CiAgZigxMDAwMDAwKSwgZigxMDAwMDAwMDAwKTsKI2RlZmluZSBnKHgpIGJpbmFyeV9wcmVmaXgoeCwgJmQsICZwKSwgcHJpbnRmKCIlZDogJWcgJXNcbiIsIHgsIGQsIHApCiAgZygxMDIzKSwgZygxMDI0KSwgZygxMDI1KTsKICBnKDEwNDg1NzYpLCBnKDEwNzM3NDE4MjQpOwogIHJldHVybiAwOwp9Cg==