C++数据结构的一个小问题

Yeah天 CSDN会员 Yeah天 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
一个很简单的大整数求和问题,但是不知道为什么当两个数位数不同输出结果就很奇怪.,
求高手求助

这是头文件:

#ifndef SEQ_LIST_
#define SEQ_LIST_
#include <vector>
using std::vector;

const int MaxSize = 100;
template <class T> class SeqList;
template <class T>
SeqList<T> Add(SeqList<T> A, SeqList<T> B);

template <class T>
class SeqList {
public:
friend SeqList<T> Add<>(SeqList<T> A, SeqList<T> B);
SeqList() { length = 0; }
SeqList(vector<T> v);
~SeqList() {}
int Length() { return length; }
T Get(int i);
int Locate(T x);
void Insert(int i, T x);
T Delete(int i);
void PrintList();
private:
T data[MaxSize];
int length;
};

int max(int m, int n)
{
return m > n ? m : n;
}

template <class T>
SeqList<T> Add(SeqList<T> A, SeqList<T> B)
{
SeqList<T> C;
int flag = 0;
int i = 0;
int n = A.length;
int m = B.length;
while (i < n && i < m) {
C.data[i] = (A.data[i] + B.data[i] + flag) % 10;
flag = (A.data[i] + B.data[i] + flag) / 10;
i++;
}

for (; i < n; i++) {
C.data[i] = (A.data[i] + flag) % 10;
flag = (A.data[i] + flag) / 10;
}

for (; i < m; i++) {
C.data[i] = (A.data[i] + flag) % 10;
flag = (A.data[i] + flag) / 10;
}
C.length = max(m, n) + flag;
if (flag == 1) C.data[C.length - 1] = 1;
cout << "Your output";
for (i = 0; i < C.length; i++)
cout << C.data[i];
cout << endl;
return C;
}

template<class T>
SeqList<T>::SeqList(vector<T> v)
{
if (v.size() > MaxSize) throw "illegal argument";
int i = 0;
for (; i < v.size(); i++)
data[i] = v[i];
length = v.size();
//cout << length << "test";
cout << "Your input";
for (i = 0; i < length; i++)
cout << data[i];
cout << endl;
}

template<class T>
T SeqList<T>::Get(int i)
{
if (i < 1 || i > length) throw "illegal to find data by location";
else return data[i - 1];
}

template<class T>
int SeqList<T>::Locate(T x)
{
for (int i = 0; i < length; i++)
if (data[i] == x) return i + 1;
return 0;
}

template<class T>
void SeqList<T>::Insert(int i, T x)
{
if (length >= MaxSize) throw "overflow";
if (i < 1 || i > length + 1) throw "location";
for (int j = length; j >= i; j--)
data[j] = data[j - 1];
data[i - 1] = x;
length++;
}

template<class T>
T SeqList<T>::Delete(int i)
{
if (length == 0) throw "underflow";
if (i < 1 || i > length) throw "location exception";
int x = data[i - 1];
for (int j = i; j < length; j++)
data[j - 1] = data[j];
length--;
return x;
}

template<class T>
void SeqList<T>::PrintList()
{
for (int i = 0; i < length; i++)
cout << data[i];
cout << endl;
}

#endif





这是源代码:


#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <string>
using std::string;
using std::getline;
#include <vector>
using std::vector;

void inVec(vector<int> &v);

int main()
{
vector<int> v1;
vector<int> v2;
cout << "Please enter two big integer: " << endl;
inVec(v1);
inVec(v2);
cout << endl;
SeqList<int> sl1(v1);
SeqList<int> sl2(v2);
cout << endl << "Outcome: " << endl;
SeqList<int> sl3 = Add(sl1, sl2);
cout << "length of sl3: " << sl3.Length() << endl;
sl3.PrintList();

cout << "Buy!" << endl;
}

void inVec(vector<int> &v)
{
string temp;
getline(cin, temp);
auto m = temp.size();
int num;
for (decltype(temp.size()) i = 0; i < m; i++) {
num = temp[i] - 48;
v.push_back(num);
}

}

...全文

相关推荐

评论 12
收藏 已收藏
分享
返回顶部
Yeah天 CSDN会员
C++ 语言 65,214 成员 250,514 内容