g-adic拡張をc++言語でプログラムしたいのですが、何を試しても出力が間違っています。まず、g-adic展開とは何かを説明しましょう。g-adic展開は、数値を表す方法です。たとえば、2進数の場合、これは数値の2進法の展開です。そして、16進数は16進展開です。だからここに私のコードがあります:
#include <iostream>
#include <cmath>
#include <complex>
#include <valarray>
using namespace std;
int main()
{
int x;
int g;
cin>>x;
cin>>g;
int k=log(x)/log(g)+1;
int e;
int b=0;
int* myArray=NULL;
myArray=new int[k];
for(int i=0;i<k;i++)
{
myArray[i]=0;
}
while(b!=k)
{
e=x/(g^(k-b-1));
myArray[b]=e;
x=x-e*g^(k-b-1);
b++;
}
b=0;
while(b!=k)
{
cout<<myArray[b]<<endl;
b++;
}
delete [] myArray;
myArray=NULL;
return 0;
}
たとえば、105を2進数に変換する場合、x=105およびg=2の場合、kは新しい数値の長さです。この場合、それは7です。inte = 105/2 ^(7-1)=1。これが最初の番号です。次に、x = 105-1 * 2 ^(7-1)=41です。これを手動で行うと、105が1101001になることがわかります。しかし、このコードをコンパイルすると、機能しません。私の質問は、このコードの何が問題になっているのかということです。