我想用 c++ 语言编写 g-adic 扩展,但无论我尝试什么,输出仍然是错误的。让我先解释一下 g-adic 扩展是什么。g-adic 展开是一种表示数字的方法。例如,二进制数,这是数字的 2-adic 扩展。十六进制是 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 转换为二进制,x=105 和 g=2,k 是新数字的长度。在这种情况下,即 7. int e=105/2^(7-1)=1。这是第一个数字。那么 x=105-1*2^(7-1)=41。如果你手动这样做,你会发现 105 变成了 1101001。但是如果我编译这段代码,它就是行不通的。我的问题是这段代码有什么问题?