在這裏,我有一個SafeArray(不是那麼安全,但我的老師說這很好)class和bigint類。我的bigint類可以添加和減少就好,但是當我嘗試乘法函數時,它根本不打印任何東西,我試過調試並逐步通過它,但我似乎無法弄清楚,一直在努力一段時間,我絕望地卡住了。任何幫助,將不勝感激。由於在數組C++中乘以大字符串
#include <iostream>
using namespace std;
#include <algorithm>
template<typename Element>
class SafeArray
{
int size;
Element*Array;
Element def;
public:
SafeArray() //default constructor(with no parameter)
{
size = 10;
Array = new Element[size]();
}
SafeArray(int value) //constructor with one int
{
size = value;
Array = new Element[value];
for (int i = 0; i < size; ++i)
Array[i] = 0;
}
~SafeArray() {
delete[] Array;
} //destructor
SafeArray(const SafeArray& rhs) : size(rhs.size), Array(new Element[size]), def(rhs.def)
{
for (int i = 0; i < size; ++i)
Array[i] = rhs.Array[i];
}
SafeArray& operator=(SafeArray rhs)
{
std::swap(Array, rhs.Array);
std::swap(size, rhs.size);
std::swap(def, rhs.def);
return *this;
}
Element get(int pos) const //get method
{
if (pos<0)
{
cout << "error";
}
return Array[pos];
}
void set(int pos, Element val)
{
if (pos<0)
{
cout << "error";
return;
}
if (pos >= size)
{
resize(pos + 1);
}
Array[pos] = val;
}
void resize(int new_size)
{
Element*temp = new Element[new_size];
for (int i = 0; i<size; i++)
{
temp[i] = Array[i];
}
delete[]Array;
Array = temp;
size = new_size;
}
void set_default(Element d) //set_default
{
def = d;
}
int get_size() //get size
{
return size;
}
};
int size = 100; //for testing
class bigint
{
SafeArray<int> *arr;
public:
bool sign;
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(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_pos(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 sub_pos(const bigint &A)
{
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;
}
}
}
void multiply(const bigint &A)
{
for(int i=size-1;i>=0;i--)
{
int carry=0;
for(int j=size-1;j>=0;j--)
{
int product=((arr->get(i)*A.arr->get(j))+carry);
arr->set(i+j,product%10);
carry=product/10;
}
}
}
}
int main()
{
bigint a,b;
a.assign("1234");
b.assign("5678");
a.multiply(b);
a.print();
return 0;
}
在'multiply'函數中,外部循環,條件是否應該是'i <= 0'?你不是指'i> = 0'嗎? –
耶我的壞。只是修復它。 – jack
你的'SafeArray'類是不安全的。誰在教這個東西?沒有複製構造函數,沒有賦值運算符?它應該是「安全的」? – PaulMcKenzie