こんにちは。
C言語において、n進数の値を10進数の値に変換する方法を考えています。
例えば、2進数の101を、10進数で表すと5になります。
これを関数化し、
n_to_m(int x, unsigned n); といったプロトタイプで、
渡された整数x(n進数)を、10進数での値に変換する関数を作りたいのです。
逆に、10進数の値を、n進数の値に変換する関数も一緒に作りたいと考えています。
何かいい方法を思いついた方がいらっしゃれば、是非アドバイスを頂きたいと思います。
では、よろしくお願い致します。
No.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)求めた変換結果を呼び出し元へ返す。
こんなところでしょうか。
御回答ありがとうございます。
>n_to_mという名前では何のことやらよくわからなそうなので、
こんなプロトタイプがいいのではないかと思います。
すみません。n_to_10の間違いでした。
アドバイスして頂いたアルゴリズムを参考にして、
何とか作成する事ができました。
ありがとうございました。
No.1
- 回答日時:
何進数というのは、数値の表記方法にすぎません。
ですので、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);
御回答ありがとうございます。
strtoimaxやsnprinfといった関数の存在ははじめて知りました。
是非参考にさせていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- その他(Microsoft Office) エクセル 日付を数値に変換する方法 4 2023/03/24 12:05
- 物理学 座標変換に関して質問です。参考書に 「力は一般に時間と場所によって異なるから力f(ベクトル)はx,y 3 2022/07/03 20:24
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- Excel(エクセル) エクセル、日々の集計整理方法。(再送です。) 5 2022/10/02 00:19
- Ruby プログラミング 3 2023/06/09 14:30
- Excel(エクセル) DATE関数で指定する「日」のセルが関数の場合の対処法 5 2022/09/14 15:46
- デスクトップパソコン 40年間の悩み キーボードにおいて初期値として漢字ローマ字変換に設定する方法 8 2023/05/08 14:50
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Excel(エクセル) エクセルでセルに何らかの文字が入力されたらそれを任意の数値として認識させる方法がしりたいです。 3 2023/03/16 20:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETで1→A、2→B、26→Z、27→AA...
-
16進をASCIIコードに変換する...
-
2の補数の計算について
-
16進コード文字列を文字列に変換
-
C++ 文字列変数と16進数の比較
-
WORD型をCString型に変換する方法
-
vb6の桁数指定
-
2進数から10進数へ変換
-
アメリカ表記?イギリス表記?
-
C++/CLI System::String::Fotma...
-
【C++/CLI】int型からString型...
-
C#でListとDictionaryの判別方法
-
秀丸マクロで 大文字を小文字...
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
手動または分散トランザクショ...
-
Accessのフィールド名に半角括...
-
VBAでアクセスDBからデータの取...
-
Excel2010のinputboxで複数デー...
-
vba フィルター 複数条件 3つ以...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6.0の「vbFromUnicode」はVB....
-
VB.NETで1→A、2→B、26→Z、27→AA...
-
16進をASCIIコードに変換する...
-
16進コード文字列を文字列に変換
-
WORD型をCString型に変換する方法
-
C++ 文字列変数と16進数の比較
-
C#でListとDictionaryの判別方法
-
【C++/CLI】int型からString型...
-
Pythonの指数表記について
-
バイト型のデータをLong型に変換
-
10進数を2進数
-
2進数から10進数へ変換
-
対数変換のついて
-
数字→漢数字変換
-
Excelの数字(文字列)合計につい...
-
Boolean型変数の値を反転する方法
-
VC++ std::stringからLPCWSTRに...
-
VB6 case文について
-
文字型を日付/時刻型に変換する...
-
textbox.textやlabel.captionの...
おすすめ情報