• ベストアンサー

C&C++のプログラミングの質問なんですが(2回目)、、、、

10進整数dをn進数に変換する関数がわかりません。 ただしnが10より大きい場合にも対応でき、 インターフェイスは char* d2q(int d, int n) でおねがいします

質問者が選んだベストアンサー

  • ベストアンサー
noname#2009
noname#2009
回答No.5

ということで、こんな感じ #include<string.h> // require of memset() strcpy() #include<stdio.h> // require of sprintf() printf() #define RETBUFMAX 34 // 戻り値バッファサイズ char* d2q(int d, int n) { static char retbuf[RETBUFMAX]; // 戻り値バッファ char numch[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // 数字+英数字 char tmp[RETBUFMAX]; //テンポラリバッファ int res; // 剰余値 int val; // 入力値・商 // 2進数から32進数まで以外はエラー if(n < 2 || n > sizeof(numch)) return NULL; val = d; // バッファクリア memset(retbuf, 0, sizeof(retbuf)); // 下桁から計算るーぷ for(;val > 0;) { res = val % n; val = val / n; sprintf(tmp, "%c%s", numch[res], retbuf); // デバッグ用 printf("res=%d val=%d %s\n", res, val, tmp); strcpy(retbuf, tmp); } // 返却 return retbuf; } 英数字使用で32進数まで対応。どうぞお好きに

その他の回答 (4)

  • hogeta
  • ベストアンサー率14% (4/28)
回答No.4

gccにはitoaはなかったようなきがします。 atoiも中途半端だったような。 それはともかく、この質問は「関数を作って」という質問ですよね。 正直いって、むしのよすぎる質問ではないですか? ここは学校の課題の答を教えてもらうところではないと思いますが みなさんどのようにお考えでしょう? 文句ばかりいってもしょうがないので、ポインタを示しておきます。 dをnで割った余りがn進数の1桁になります。 あとは、dをnで割った商に対して同じことを繰り返せば、 2桁、3桁と求まっていきます。 あとは、繰り返すたびに桁の位置をずらすことと、 10以上の数は、アルファベットに変換することを忘れないで。

  • yotta
  • ベストアンサー率32% (26/79)
回答No.3

itoa()でだめな理由が分かりませんが あえて d2q() を創るとすると char str[100]; char *sss; char *d2q(int d,int n) { return(itoa(d,str,n)); } または char *d2q(int d,int n) { itoa(d,str,n); return(str); } として sss=d2q(100,16); で呼ぶ 次の1行でも全く同じです sss=itoa(100,str,16); また sss に値を取らなくても str でも同じです itoa(100,str,16); #前回の質問はちゃんと締め切って下さいね

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

なんでitoa()ではだめなんですか? 格納する領域が無いのにchar*で返して欲しいといっても、だめでしょ。 そのインターフェイスで結果が欲しいのであれば、グローバルな領域に値を格納する領域を準備しておく必要があります。 #前回の質問もほったらかしのようですし。

参考URL:
http://www.okweb.ne.jp/kotaeru.php3?q=300399
enmaru
質問者

補足

戻り値は、変換されたn進数をあらわす文字列としたいんですが・・・・・

  • madman
  • ベストアンサー率24% (612/2465)
回答No.1

10進数であろうと、n進数であろうと、プログラム内のデータとしては同じ値です。 従って、intでn進数として持つことは出来ません。 表示させるだけなら、printfなどを使ってフォーマット変換するだけです。

関連するQ&A

  • char型の扱える範囲とは?

    整数をchar型にしたいと思い int a = 250; char b[1]; sprintf(b, %d, a); と書いたのですが, char型の扱える整数の範囲である-256~255のint型の整数しか char型にこの場合変換できないということでいいでしょうか? またint型に代入できる値は,32bit以内の整数という考えでいいですか?

  • 大至急 プログラミングについてです。

    キーボードから整数を入力し、入力された整数が100以上10以上100未満、10未満のいずれかを判定してその結果を出力するプログラムを作りなさい。 なのですが、自分が考えたのは#include <stdio.h> int main(void) { char *str[] = {"10未満", "10以上100未満", "100以上"}; int n; scanf("%d", &n); puts(str[(n >= 10) + (n >= 100)]); return 0; } ですが、友達の教科書と例回答を見ていると写真のようにしないといけないみたいなのですが、どなたかご教授お願い致します

  • わかりません・・・。

    二つの自然数を引数として与えられて,それらの最大公約数を返す関数 int gcd(int m, int n) { /* … */ }を作成し,それを利用して入力された二つの正整数の最大公約数を求めるプログラムを作り方を教えてください。 ユークリッドの互除法を使い、関数を使う事が条件なのですが全然わかりません。 #include<stdio.h> int gcd(int m, int n) if(m>n) {m%n}            if(m%n==0) printf("最大公約数は%d",n); ←このあたりがわかりません else if (n%(m%n)) printf("最大公約数は%d",n%(m%n)); int main( void ) { int na, nb; puts(""二つの整数を入力してください。); printf("整数1:"); scanf("%d",na); printf("整数2:"); scanf("%d",nb); printf("最大公約数は%dです。\n",gcd(int m, int n)); return0; }

  • プログラミング 関数

    教えてください。 入力された文字列のうち、文字aの数を数える関数count_aを作成する。 以下は関数count_aを利用したmainのプログラムの例です。 #include <stdio.h> int count_a(char str[]); int main ( void ) { char str[255]="abcaeag"; printf("%d\n",count_a(str)); return 0; }

  • プログラミング教えてください!!!お願いします。

    プログラミング教えてください!!!お願いします。 次の文が実行されると何がどのようにプリントされるか。何もプリントされない時は「なし」と記せ。 また、途中に「ブランク」が入る場合は、”b”と記せ。 (1) int func1(), func2(); int data = 100; main() { int w = 1; static x =10; printf("** %d, %d, %d\n" ,w,x,data); func1(); printf("** %d, %d, %d\n" ,w,x,data); } int func1(){ int w = 2; static int x = 20: printf("*** %d, %d, %d\n", w, x, data); x += 10; func2(); printf("*** %d, %d, %d\n" , w,x,data); x *= 2; data = data - x; } int func2() { int w = 3; static int x = 30; printf("**** %d, %d, %d\n" ,w,x,data); data -= x; } (2) int func1(char *, char *, char *); int func2(char *, char *, char *); main() { char sta[20], stb[20], stc[20], std[20]; int i=0; func1("abc","xyz",sta); printf("%d -- %s\n" ,++i,sta); func1("123","456",stb); printf("%d -- %s\n" ,++i,stb); func1(sta,stb,stc); printf("%d -- %s\n" ,++i,stc); func2(sta,stb,std); printf("%d -- %s\n" ,++i,std); } int func1(char *a, char *b, char *c){ while(*a) *c++ = *a++; while(*b) *c++ = *b++; * c = 0x00; } int func2(char *a, char *b, char *c){ int i = 0; while(*b){ if(i%2 == 0) *c++ = *a++; else *c++ = *b++; i++; } *c = 0x00; }

  • Cのプログラミングを勉強中です。

    Cのプログラミングを勉強中です。 Aの値のBに対する割合を表示すしたいのですが、以下のように記述してもうまくいきません。 どこを直したらよいか教えていただけますか。 #include <stdio.h> int main(void) { int n1 , n2 ; printf("二つの整数を入力してください。\n"); printf("整数A:"); scanf("%d", &n1); printf("整数B:"); scanf("%d", &n2); printf("Aの値はBの%d%%です。\n" , n1 / n2 * 100 ); return(0); }

  • n進数の値を10進数の値に変換するには?

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

  • C言語 プログラミング 関数

    文字列を引数とし、それをint型の整数に変換し戻り値として返す関数を作りたいんですが、どのように作ったらいいでしょうか? お願いします。

  • 縁起の悪い49抜き数字(出力について)

    C++初心者です。 10進数の整数を渡して、対応する49抜きの数値を標準出力に出力関数です。 (1)n>=8 (2)"%8\n" n 良く分からないのですが、(1)(2)のステートメントこれでいいですか。よろしくお願いします。 void printwo49(unsigned int n) { char buf[] = "01235678"; if ( (1) ) {// nが8以上ならば上位の桁がある      printwo49( (2) );// 上位の桁の処理を行う } putchar(buf[n % 8]); }

  • C++の質問です!

    課題なんですけど分からないです(泣) 解答お願いします(;;) 下記のプログラム中の(1)~(7)には何が入るか? #include <stdafx.h> (3) sho((4)) //関数sho の定義 { return((5)m/n); } void irekae(int (6),int (7)) //関数irekae の定義(2つの引数をp,q とする、型に注意!) { int k; k=(6); (6)=(7); (7)=k; } int _tmain(int argc, _TCHAR* argv[]) //関数_tmain の定義 { int i,j; double x; printf("整数i,j?:"); scanf("%d%d",&i,&j); (1); //整数i,j を引数として実数除算した商を返す関数sho を呼び出す。 printf("i/j=%f¥n",x); //結果の確認 (2); //整数i,j の値を入れ換える関数irekae を呼び出す。 (1); printf("i/j=%f¥n",x); }