0

我想用 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。但是如果我编译这段代码,它就是行不通的。我的问题是这段代码有什么问题?

4

2 回答 2

0

^不做幂运算。它是异或运算符。要进行幂运算,请使用该pow函数。

e=x/std::pow(double(g),double(k-b-1));
myArray[b]=e;
x=x-e*std::pow(double(g),double(k-b-1));

您可以在 IDE One 上查看您的程序以及我的更改。

于 2012-07-18T15:37:15.693 回答
0

这里:运行这个程序

#include <iostream.h>
#include <cmath>
#include<stdlib.h>
#include<stdio.h>

int main()
{
    int x;
    int g;
    cin>>x;
    cin>>g;

    while(x>g)
    {
        cout<<x%g<<endl;
        x/=g;
    }
            cout<<x%g<<endl;

    return 0;
    }

适用于 105 和 2,不需要数组

于 2012-07-18T14:55:57.320 回答