我想用C++语言编写g-adic扩展,但无论我尝试什么,输出仍然是错误的。让我先解释一下g-adic的扩张是什么。 g-adic扩展是表示数字的一种方式。例如,二进制数字,这是数字的2 adic扩展。而十六进制是16-adic扩展。因此,这里是我的代码:在C++编程g-adic扩展
#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.但是如果我编译这段代码,它就不起作用。我的问题是这个代码有什么问题?
怎么样首先在格式化的代码? – 2012-07-18 14:51:05
哪个减法首先在这里完成?:g ^(k-b-1) – 2012-07-18 14:51:15
@Torsten Robitzki:我不知道格式是什么。 – Badshah 2012-07-18 15:02:21