"numeral": Printing the numeral string utility in C
hacker emblem Happy Hacking!


English Here (machine translation)

numeral: 整数を表す数字文字列を英語/米語の表記に変換するユーティリティ

この C 言語ユーティリティは、整数を表す半角数字文字列を英語あるいは米語表記の半角英字文字列に変換します。
変換できる整数の範囲は、英語表記指定の場合、最大 126 桁の数字列です。
米語表記指定の場合は、"-999999999999999999999999999999999999999999999999999999999999999999" から "999999999999999999999999999999999999999999999999999999999999999999" までの最大 66 桁の数字文字列を扱えることになります。

変換後の文字列が最大になるのは、英語表記の場合、負符号 - の後に 7 を 126 桁続けた数字列の場合で、文字列長 1685 バイトの "minus seven hundreds seventy seven thousands seven hundreds seventy seven vigintillions seven hundreds seventy seven thousands seven hundreds seventy seven novemdecillions seven hundreds seventy seven thousands seven hundreds seventy seven octodecillions seven hundreds seventy seven thousands seven hundreds seventy seven septendecillions seven hundreds seventy seven thousands seven hundreds seventy seven sexdecillions seven hundreds seventy seven thousands seven hundreds seventy seven quindecillions seven hundreds seventy seven thousands seven hundreds seventy seven quattuordecillions seven hundreds seventy seven thousands seven hundreds seventy seven tredecillions seven hundreds seventy seven thousands seven hundreds seventy seven duodecillions seven hundreds seventy seven thousands seven hundreds seventy seven undecillions seven hundreds seventy seven thousands seven hundreds seventy seven decillions seven hundreds seventy seven thousands seven hundreds seventy seven nonillions seven hundreds seventy seven thousands seven hundreds seventy seven octillions seven hundreds seventy seven thousands seven hundreds seventy seven septillions seven hundreds seventy seven thousands seven hundreds seventy seven sextillions seven hundreds seventy seven thousands seven hundreds seventy seven quintillions seven hundreds seventy seven thousands seven hundreds seventy seven quadrillions seven hundreds seventy seven thousands seven hundreds seventy seven trillions seven hundreds seventy seven thousands seven hundreds seventy seven billions seven hundreds seventy seven thousands seven hundreds seventy seven millions seven hundreds seventy seven thousands seven hundreds seventy seven" という半角英字文字列になります。
米語表記の場合は、"-777777777777777777777777777777777777777777777777777777777777777777" で、文字列長 915 バイトの "minus seven hundreds seventy seven vigintillions seven hundreds seventy seven novemdecillions seven hundreds seventy seven octodecillions seven hundreds seventy seven septendecillions seven hundreds seventy seven sexdecillions seven hundreds seventy seven quindecillions seven hundreds seventy seven quattuordecillions seven hundreds seventy seven tredecillions seven hundreds seventy seven duodecillions seven hundreds seventy seven undecillions seven hundreds seventy seven decillions seven hundreds seventy seven nonillions seven hundreds seventy seven octillions seven hundreds seventy seven septillions seven hundreds seventy seven sextillions seven hundreds seventy seven quintillions seven hundreds seventy seven quadrillions seven hundreds seventy seven trillions seven hundreds seventy seven billions seven hundreds seventy seven millions seven hundreds seventy seven thousands seven hundreds seventy seven" という半角英字文字列になります。

API を使用するためのヘッダは numeral.h で、API の実装は numeral.c です。API の説明は、この文書で後述しています。

テスト・プログラム numeral-test.c そして make ファイル Makefile を記述しました。テストは、

        $ make clean; make; make test
とコマンド実行することで行えます。

指数ごとの米語表記は下表のようになります。

指数米語の表記
10^100googol ※この API ではサポート外です
10^63vigintillion
10^60novemdecillion
10^57octodecillion
10^54septendecillion
10^51sexdecillion
10^48quindecillion
10^45quattuordecillion
10^42tredecillion
10^39duodecillion
10^36undecillion
10^33decillion
10^30nonillion (or noventillion)
10^27octillion
10^24septillion
10^21sextillion
10^18quintillion
10^15quadrillion
10^12trillion
10^9billion
10^6million
10^3thousand
10^2hundred

API の説明

  1. 整数を表す半角数字文字列を米語表記の半角英字文字列に変換する numeral()
    int numeral(char *src
    , char *dst
    , size_t sz
    , NUMERAL_REPRE_STYLE_t style
    );

    src には (符合を除いて) 英語表記指定時は最大 126 桁、米語表記指定時は最大 66 桁までの半角数字文字列 (ASCII コード) を渡します。
    dst には米語表記に変換した半角英字文字列を出力します。
    出力文字列の領域には英語表記の場合は最大 1685 文字が、米語表記の場合は最大 915 文字が出力されます。
    sz には dst の指す出力領域のサイズを指定します。
    style には英語表記を指定する場合は NUMERAL_STYLE_ENGLISH を、米語表記を指定する場合は NUMERAL_STYLE_AMERICAN を指定します。

    戻り値は以下の意味を持ちます。

    • NUMERAL_NORMAL_END (= 0) : 正常終了
    • NUMERAL_ILLEGAL_ARGS (= 1) : 不正な引数を渡された場合
    • NUMERAL_BUFFER_OVERFLOW (= 2) : 整形結果が出力先のメモリ領域サイズを超過する場合