C/C++の宿題のまとめ@Wiki

進数変換

最終更新:

匿名ユーザー

- view
管理者のみ編集可
268 :デフォルトの名無しさん :2005/11/04(金) 21:13:46
[1] 授業単元:応用プログラミング
[2] 問題文
10進数からn進数へ、n進数から10進数へ変換するプログラムを作成せよ。但し、
nは16以下でn進数の桁数は10桁以下。変換は以下のようなvoid型関数を定義して行え。
これらの関数の引数では10進数はint型変数に入れ、n進数はchar型の配列(string型はダメ)に入れる。
decTon 10進数をn進数に変換する関数。
引数 10進数を渡すint型の値引数。
n進数を入れる(結果)char型の配列。
nの値。
nTondec n進数を10進数に変換する関数。
引数 n進数を渡す、char型の配列。
nの値
10進数(結果)を入れるint型の参照引数。
データは実行例のように、繰り返し読めるようにする。

注1)char型の配列の文字列を入れる場合、文字列の終わりにはヌル文字を入れる。
注2)n進数でn>10の場合は、11はA、12はBと表示されるがその変換にはASCIIコードの性質を利用すること。
ASCIIコード表
ttp://www.psl.ne.jp/perl/pdojo00b.html
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: 不明
 [3.3] 言語: C++
[4] 期限:05年11月7日13:00まで
[5] その他の制限: #include<iostream>から書き始める

n進数を10進数にするだけならなんとか出来そうなのですがその逆が出来ませんorz
どなたかご教示を賜りたいです。

269 :デフォルトの名無しさん :2005/11/04(金) 21:14:41
続き 実行例
実行例)
何進数から何進数へ変換しますか?:10 16
10進数値を入力してください:123456
123456は16進数に変換すると1E240
何進数から何進数へ変換しますか?:16 10
16進数値を入力してください:1E240
16進数で1E240は123456
何進数から何進数へ変換しますか?:5 8
どちらかは、10進数にしてください
271 :デフォルトの名無しさん :2005/11/04(金) 22:35:49
>>268適当に書いてみた
#include<iostream>
#include<cctype>
using namespace std;
void decTon(int value,char string[],int radix){
if(value<0)*string++ = '-',value = -value;
char*p=string,c;
do *string++ = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[value%radix];while(value /= radix);
*string-- = '\0';
while(p < string)c = *p,*p++ = *string,*string-- = c;
}
void nTondec(char string[],int radix,int&value){
value=0;
bool sign = *string=='-';
string += sign;
while(char c=tolower(*string++))value = value*radix+(isdigit(c)?c-'0':c-'a'+10);
if(sign)value=-value;
}
int main(){
char buf[80];
for(int from,to,value;;){
 cout << "何進数から何進数へ変換しますか?:";cin >> from >> to;
 if(from==10 || to==10){
  cout << from << "進数値を入力してください:"; cin >> buf;
  cout << buf << "は"<< to <<"進数に変換すると";
  nTondec(buf,from,value);decTon(value,buf,to);
  cout << buf << endl;
 }else cout << "どちらかは、10進数にしてください" << endl;
}
}
272 :デフォルトの名無しさん :2005/11/04(金) 22:39:05
>>268
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1041.txt
作ったが、最初のcstringのincludeは要らない・・・手動で削除よろ
それと今読んでるAccelerated C++に影響されて不変の表明なんて付けてたら
何かやり残した気がしないでもないんだが忘れてしまった
簡単にはテストしたが十分にテストよろ

それと無限ループで遊んでるが、不味かったら消してくれw
目安箱バナー