我想用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