アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。

C言語において、n進数の値を10進数の値に変換する方法を考えています。
例えば、2進数の101を、10進数で表すと5になります。
これを関数化し、
n_to_m(int x, unsigned n); といったプロトタイプで、
渡された整数x(n進数)を、10進数での値に変換する関数を作りたいのです。
逆に、10進数の値を、n進数の値に変換する関数も一緒に作りたいと考えています。
何かいい方法を思いついた方がいらっしゃれば、是非アドバイスを頂きたいと思います。
では、よろしくお願い致します。

A 回答 (2件)

>n_to_m(int x, unsigned n); といったプロトタイプで、


>渡された整数x(n進数)を、10進数での値に変換する関数を作りたいのです。

変換後の10進数を戻り値とする必要がありそうであるのと、
n_to_mという名前では何のことやらよくわからなそうなので、
こんなプロトタイプがいいのではないかと思います。

int toDecimal(int x, unsigned int n);

1)変換結果を格納する変数を0で初期化する。
2)変換元が0でない間、2-1)~2-3)を繰り返す。
2-1)変換元を10で割った剰余がn未満ならば、変換結果に加える。
2-2)変換元を10で割った剰余がn以上ならば、変換元の数値をn進数で表現できないため、
エラーとする。エラー時の戻り値をどうするかは考えてみてください。
2-3)変換元を10で割った商を、新たな変換元とする。
3)求めた変換結果を呼び出し元へ返す。

こんなところでしょうか。
    • good
    • 0
この回答へのお礼

御回答ありがとうございます。

>n_to_mという名前では何のことやらよくわからなそうなので、
こんなプロトタイプがいいのではないかと思います。

すみません。n_to_10の間違いでした。

アドバイスして頂いたアルゴリズムを参考にして、
何とか作成する事ができました。
ありがとうございました。

お礼日時:2011/09/18 23:11

何進数というのは、数値の表記方法にすぎません。


ですので、n進数で表記された文字列を10進数で表記された文字列に変換するということならわかります。

実現するには次のようにします。

const char* src = "101";
char *endptr;
int radix = 2;

errno = 0;
intmax_t value = strtoimax(src, &endptr, radix);
if (errno != 0 || *endptr != '\0')
{
 /* エラー処理 */
}

char result[CHAR_BIT*sizeof(value)/3+1];
snprintf(result, sizeof(result), "%jd", value);
    • good
    • 0
この回答へのお礼

御回答ありがとうございます。

strtoimaxやsnprinfといった関数の存在ははじめて知りました。
是非参考にさせていただきます。

お礼日時:2011/09/18 23:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!