C++数据结构的一个小问题
一个很简单的大整数求和问题,但是不知道为什么当两个数位数不同输出结果就很奇怪.,
求高手求助
这是头文件:
#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);
}
}

求高手求助

这是头文件:
#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);
}
}

...全文
相关推荐
CPP-programs:CP,哎呀,数据结构和算法的回购,基本上就像一个练习回购,可用于面试基本问题的准备
总之,"CPP-programs: CP,哎呀,数据结构和算法的回购"是一个全面的C++学习资源,适合准备面试和提升编程能力的个人。
cpp-使用C的160算法和数据结构问题
本文将深入探讨“cpp-使用C的160算法和数据结构问题”,并结合“C/C++开发-其它杂项”这一标签,来解析C++中的算法与数据结构的重要性以及它们在实际问题中的应用。
dsa-in-cpp:C ++中的数据结构和算法问题的实现
首先,我们来看"dsa-in-cpp"项目,它的标题明确指出这是C++中数据结构和算法问题的实现。这个项目提供了一个实践平台,开发者可以在此学习如何用C++来解决各种数据结构和算法问题,提升编程能力。
cpp.zip_数据结构_Visual_C++_
因此,通常推荐使用循环实现以避免这种问题。在Visual C++环境中,这是一个集成开发环境(IDE),由微软公司开发,用于编写、调试和构建C++应用程序。
leetcode答案-cpp-leetcode:C++中流行的leetcode问题的答案
这个压缩包文件“cpp-leetcode-master”显然包含了C++语言解答LeetCode上流行问题的源代码。以下是关于这个主题的一些详细知识点:1.


