整数n(2<=n<=16)とn進数の数字列digitsを与えると10進数に変換して表示するプログラム
関数void base2dec(int n, string digits, int &dec)を使用する
実行例 110101(2)=53
123(8)=83
7ACE(16)=31438
以下はとりあえずつくったみたプログラムです
#include<iostream>
#include<string>
using namespace std;
void base2dec(int n, string digits, int &dec)
{
int i,x=0;
for(i=0; i=digits.size()-1; i++)
{
if(n<10)
{
x=digits[i]-'0';
}
else
{
x=digits[i]-'A'+10;
}
dec=(x*n);
if(cin >> digits[i++])
{
if(n<10)
{
dec=dec+(digits[i++]-'0');
}
else
{
dec=dec+(digits[i++]-'A'+10);
}
}
}
int value = dec;
}
int main()
{
int n,value;
string digits;
cout << "何進数ですか-->";
cin >>n;
cout << "数字列を入力してください-->";
cin >>digits;;
base2dec(n,digits,value);
cout << digits << "(" << n << ")=" << value << endl;
return 0;
}
void関数の中、特に計算方法が間違っていると思うのですが、なにがいけないかわかりません。ちなみにn進数から10進数に直す方法は理解しています。
No.2ベストアンサー
- 回答日時:
★アドバイス
>for(i=0; i=digits.size()-1; i++){
↑
この行がおかしいです。
間違い⇒for(i=0; i=digits.size()-1; i++){
正しい1⇒for(i=0; i<=digits.size()-1; i++){
正しい2⇒for(i=0; i<digits.size(); i++){
※回答者 No.1 さんのアドバイス通りです。
>void関数の中、特に計算方法が間違っていると思うのですが、なにがいけないかわかりません。
↑
『dec=(x*n);』ここが違う気がします。
『dec=(dec*n+x);』とすればいいと思いますけど。
>ちなみにn進数から10進数に直す方法は理解しています。
↑
理解しているのなら『dec=(dec*n+x);』となると思いますが…。
その他:
>if(cin >> digits[i++]){ … }
↑
このifブロック内は必要なのか?
どういう意味。
>int value = dec;
↑
最後のこの行は意味ないね。
『value』を参照してないし。
戻してないし。
そもそも dec が『参照』ですよ。
http://next1.msi.sk.shibaura-it.ac.jp/MULTIMEDIA …→『ポインタと参照』
このリンクを読みましょう。
・以上。あと16進などのA~Fは大文字専用ですね。小文字だと上手く変換できませんよ。
参考URL:http://next1.msi.sk.shibaura-it.ac.jp/MULTIMEDIA …
的確なアドバイスありがとうございます。自分の間違いがよくわかりました。変なミスばっかで申し訳なかったです。参考URLのページもとても参考になりました。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
比較回数と交換回数表示について
-
nCmの関数
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 配列と関数の練習問題
-
c言語
-
std::set<int> で、ある値が何...
-
卒業研究でよく分からないとこ...
-
C言語 エラーの原因がわからな...
-
DLLをGetProcAddress()で実行で...
-
【C++】関数ポインタの使い方
-
read関数をノンブロッキングで...
-
C言語における対称行列の作り方...
-
構造体の勉強中です 合計点の高...
-
C言語です。
-
C言語での引数の省略方法
-
困ってます…nCrを求めるC言語...
-
C++でvectorにテキストファイル...
-
プログラミング
-
素数 再帰関数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
「指定されたキャストは有効で...
-
C言語 配列と関数の練習問題
-
複数桁10進数の*桁目だけを抽出...
-
(int *)の意味
-
if と配列の組み合わせ
-
ラップ関数とはどんなものですか?
-
卒業研究でよく分からないとこ...
-
【C++】関数ポインタの使い方
-
c言語
-
足して100になるような乱数のア...
-
C言語初心者です、、、お助けく...
-
数字列を3桁ごとにカンマで区切...
-
C言語 エラーの原因がわからな...
-
実数の整数部,小数部の取得
-
課題でつまってます・・・
-
商と剰余を同時に求める(C言語)
-
C言語の配列をC++のvectorに高...
-
std::set<int> で、ある値が何...
おすすめ情報