- ベストアンサー
縁起の悪い49抜き数字とは?
- 縁起の悪い49抜き数字とは、10進数の整数を渡して、対応する49抜きの数値を標準出力に出力する関数のことです。
- この関数は、与えられた整数が8以上の場合、上位の桁に対しても処理を行います。
- 具体的には、与えられた整数を8で割った余りを基にして、対応する49抜きの数値を出力します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
質問の詳細がよく分かっていませんが、 1->1、2->2、3->3、4->5、5->6、6->7、7->8、8->10 と変換していくのであれば、(2)n/8 となるかと思います。
その他の回答 (2)
- yama5140
- ベストアンサー率54% (136/250)
>(2)"%8\n" n 良く分からないのですが、・・・。 う~ん、宿題の転記ミスかな。 ------------------------------------------- 老化防止のため、作成してみました(Borland C++5.6.4)。 ソースは、 ・++ではない ・「上位桁の処理を行う」は考慮していない ・再帰を使っていない ☆ことから、「宿題の回答」とはなり得ません。あしからず・・。 ------------------------------------------- >ホテルなど番号を振るときに、4や9を外して番号を振ることがあります てっきり、パチンコ台「番号表記」かと思いました(ジジクサ)。 (0→ 0) 10→12 20→25 30→37 40→60 1→ 1 11→13 21→26 31→38 41→61 2→ 2 12→15 22→27 32→50 42→62 3→ 3 13→16 23→28 33→51 43→63 4→ 5 14→17 24→30 34→52 44→65 5→ 6 15→18 25→31 35→53 45→66 6→ 7 16→20 26→32 36→55 46→67 7→ 8 17→21 27→33 37→56 47→68 8→10 18→22 28→35 38→57 48→70 9→11 19→23 29→36 39→58 49→71 71という表記の台は、49「番目」の台ということですね。 ☆8進数化(◆)後、8進の4表記は5、順次ずれて、8進の7表記を8とする(●)、でいいのでは。 #include <stdio.h> void printwo49( unsigned int n ) { int i, iByte = 30, i10 = n; char cKekka[32] = { 0x00 }, cDum; while( n ){ i = n % 8; // ◆ if( 4 <= i ) i++; // ● cDum = (char)( 0x30 + i ); // 文字化 cKekka[ iByte-- ] = cDum; // 格納 n /= 8; // ◆ } printf( "%d %s\n", i10, &cKekka[ ++iByte ] ); } void main() { unsigned int n; for( n = 40; n < 50; n++ ) printwo49( n ); } 注:インデントに全角空白を使っています。
- mtaka2
- ベストアンサー率73% (867/1179)
課題か何かですか? 丸投げは禁止ですよ。 ・0~9のうち、4と9が使えないので、各桁で使える数字は8種類。つまり、8進数を考える必要がある。 ・10進数の数値から8進数の数値に変換するにはどうすればよいのか ・再帰呼び出しとはどういうものか を理解すれば、自ずと答えは出てきます。 (2) については、 10進数で0~63 の数値を、8進数二桁の数値に変換するには、 上位桁・下位桁はそれぞれどういう数式で表されるか をまず考えてみてください。
お礼
entreeさん、3日してやっと理解できました。 1->1、2->2、3->3、・・・・記述されている意味も用法も分かっておりませんでした。スッキリデス。 ありがとうございました。
補足
entreeさん、質問が悪くてすみません。 ホテルなど番号を振るときに、4や9を外して番号を振ることがあります1,2,3,5,6,7,8,10・・・・38,50のように、すべての桁で4と9を含む数を外すとき、8進数と同様な考えが出来るようです。その場合の、「上位桁の処理を行う」(2)が理解できていません。 よろしくお願いします。