0

再帰を使用して基数 10 から基数 12 への変換に文字を追加するのに問題があります。関数に文字を追加するにはどうすればよいですか? if ステートメントを追加することを考えていましたが、どこでどのように行えばよいのかわかりません。ポインタは大歓迎ですありがとう!

1 から 12 までのカウントが与えられた場合:

Dec 1 2 3 4 5 6 7 8 9 10 11 12 

Duo 1 2 3 4 5 6 7 8 9 X  E  10

私の機能:

template<class myType>
myType convertDec(myType number){
    if(number == 0)
        return number;
    //if statement somewhere in here? not sure considering i can't touch the return statement
    return (number % 12) + 10*convertDec(number / 12);
}

理想的な出力例:

65280 = 31940 (正常に動作)

2147483626 = 4EE23088X (動作しません!)

4

2 に答える 2

6
#include <iostream>
#include <string>

using namespace std;

string ConvertToDuodecimal(unsigned long long n)
{
  if (n < 12)
    return string() + "0123456789XE"[n];
  return ConvertToDuodecimal(n / 12) + ConvertToDuodecimal(n % 12);
}

int main()
{
  cout << ConvertToDuodecimal(0) << endl;
  cout << ConvertToDuodecimal(1) << endl;
  cout << ConvertToDuodecimal(10) << endl;
  cout << ConvertToDuodecimal(11) << endl;
  cout << ConvertToDuodecimal(12) << endl;
  cout << ConvertToDuodecimal(13) << endl;
  cout << ConvertToDuodecimal(65280) << endl;
  cout << ConvertToDuodecimal(2147483626) << endl;
  return 0;
}

出力 ( ideone ):

0
1
X
E
10
11
31940
4EE23088X
于 2013-04-09T17:49:19.760 に答える
0

基数は、数値の表示方法のプロパティであり、その内部表現とは関係ありません。base 12 を使用して通常の int を出力する関数を作成する必要があります。

a = 12;         // A = 12 (in base 10)
printf("%d",a); // Prints a in base 10 (still 12)
printf("%x",a); // Prints a in base 16 (now C)

あなたのコードは実際の値を変更していますが、これは正しいことではありません。

(そして、はい、衒学者がストライキする前に、printfは良いC ++ではありません...)

于 2013-04-09T17:48:23.130 に答える