#include <iostream>
#include <stdio.h>
#include <string>
#include <iomanip>
#include <cmath>
using namespace std;
void toBase (int n, int base)
{
string x = "0123456789ABCDEF";
if (n > 0)
{
toBase(n / base, base);
cout << x[n % base];
}
}
int main()
{
float num;
int a;
cout << "";
cin >> num;
cout << "";
cin >> a;
toBase(num, a);
cout << ".";
float fNum = 12.34;
int iPart = (int)fNum;
float fPart = fNum - (float)iPart;
toBase(fNum, a);
cout << endl;
}
以前にも同様の質問を投稿しましたが、ここにもう一度。小数を機能させることができません。2 倍してみましたがうまくいきませんでした。とにかく、10 進数 (小数を含む) を他の基数 (2 から 16) に変換するコードを作成することになっています。これまでのところ、10 のテスト結果のうち 2 つだけが正しいです。
10.5 - 1010.1 - 1010.1100
2
3.827 - 10.2110222122 - 10.110
3
82.7593 - 101.6744681322 - 101.13
9
7218.8192 - 5472.90139A8535 - 5472.11
11
8273.8 - 26B8.C - 26B8.C
15
23517.75 - 5BDD.C - 5BDD.C
16
92.33271 - 1011100.0101010100 - 1011100.1100
2
4095.839 - 7777.6554426416 - 7777.14
8
29672.9311 - 13033220.3232113021 - 13033220.30
4
9999.987 - 270F.FCAC083126 - 270F.C
16
ご覧のとおり、ドットの前の数字は常に正しいですが、小数 (2 つのケースを除く) は常に間違っています。(10.5 と 2 は 10 進数と基数です。2 番目の数値は取得する必要があるもので、3 番目の数値は取得するものです)。