比较两个bigints c ++

时间:2015-02-14 19:57:28

标签: c++ arrays class bigint

我有一个bigint类,它使用一个名为SafeArray的数组,我在另一个类中创建。我无法使用矢量。 set和get函数调用来自SafeArray类。获取数组位置的int参数,并设置2个int参数(一个用于位置,一个用于值)。这个bigint类中的所有方法都可以正常工作(我们不必考虑负整数),除了我的compare方法需要工作。我希望它能够比较两个bigint,如果(const bigint和& A)数字大于另一个(cout 1),如果它更小(cout 2),如果它们是相同的(cout 0)。任何有关此方法的帮助将不胜感激。感谢

int size = 35; //will get bigger, small now just for testing
class bigint
{
    SafeArray<int> *arr;
public:
    bigint()            //initializes to zero
    {
        arr = new SafeArray<int>;
        for(int i =0;i < size; i++)
            arr->set(i,0);
    }

    void print()                 //prints numbers without zeroes in front
    {
        bool start_num=false;
        for(int i = 0;i <arr->get_size() ;i++)
        {
            if(arr->get(i)!=0 && start_num==false )
            {start_num=true;
                cout << arr->get(i);}
         else if(start_num==true)
             cout<<arr->get(i);                
        }

       cout<<endl;
    }

    void assign(const bigint &A)                  //
    {
        for(int i=0;i<arr->get_size();i++)
        {                                   //Ways to initialize stuff
            arr->set(i,A.arr->get(i));
        }        
    }

    void assign(int num)                                     //
    {
        for(int i = arr->get_size()- 1; i >= 0; i--)
        {
            arr->set(i,num%10);
            num /=10;
        }          
    }

    void assign(string num)                        //
    {
        long len = num.length();
        int j=arr->get_size()-1;
        for(long i=len-1;i>=0;i--)
        {
            arr->set(j,num[i]-48);
            j--;
        }
    }

    void add(const bigint &A)                    //add big ints
    {
        int carry=0;
        for(int i=size-1;i>=0;i--)
           {
               int result = arr->get(i)+A.arr->get(i)+carry;
               arr->set(i,result%10);
               carry=result/10;
           }
    }

    void subtract(const bigint &A)                 //subtract big ints
    {
        int borrow = 0;
        for(int i=size-1; i >= 0; --i)
        {
            int result=((arr->get(i) - A.arr->get(i) - borrow));
            if(result < 0)
            {
                arr->set(i, result + 10);
                borrow = 1;
            }
            else
            {
                arr->set(i, result);
                borrow = 0;
            }
        }
    }

//int compare(const bigint &A)               //compare big ints
//    {
//        
//        for(int i<size;i>0;i--)
//            {
//                if(A.arr->get(i) > arr->get(i))
//                    {
//                    return 1;
//                    }
//                else if(A.arr->get(i) < arr->get(i))
//                    {
//                        return -1;
//                    }
//                else
//                    {
//                        return 0;
//                    }
//            }
//        
//    }

};
int main()    
{    
    bigint a, b, c;

    a.assign("12345678");                             //for testing
    b.assign("12345678");
    //a.compare(b);
    a.print();
    c.assign(24691357);        // 696969 is small enough to be an int.
    a.add(b);                // a += b;
    a.subtract(c);           // a -= b;
    a.print();

    return 0;
}

1 个答案:

答案 0 :(得分:1)

比较的逻辑问题是你在相等的第一个数字处返回两个相等的数字。

在这种情况下,你需要继续比较下一个数字,只有当它们全部相等时才返回0。