64,682
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <string.h>
#define MAXLEN 1000
char a1[MAXLEN];
char a2[MAXLEN];
static int v1[MAXLEN];
static int v2[MAXLEN];
static int v3[MAXLEN];
int i,j,n,L,z;
void main(void) {
scanf("%d",&n);
for (j=0;j<n;j++) {
scanf("%s%s",a1,a2);
L=strlen(a1);
for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0';
L=strlen(a2);
for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0';
for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i];
for (i=0;i<MAXLEN;i++) {
if (v3[i]>=10) {
v3[i+1]+=v3[i]/10;
v3[i]=v3[i]%10;
}
}
printf("Case %d:\n", j+1);
printf("%s + %s = ", a1, a2);
z=0;
for (i=MAXLEN-1;i>=0;i--) {
if (z==0) {
if (v3[i]!=0) {
printf("%d",v3[i]);
z=1;
}
} else {
printf("%d",v3[i]);
}
}
if (z==0) printf("0");
printf("\n");
}
}
//Sample Input
//3
//0 0
//1 2
//112233445566778899 998877665544332211
//
//Sample Output
//Case 1:
//0 + 0 = 0
//Case 2:
//1 + 2 = 3
//Case 3:
//112233445566778899 + 998877665544332211 = 1111111111111111110
#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]; // 每次构造一个顺序表没有将数组初始化,从而导致没有赋值的为是很大的随机负值
// 改为 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);
}
}
天哪,经过舍友和我的不懈努力,终于发现问题啦,每次构造一个顺序表没有将数组初始化,从而导致没有赋值的为是很大的随机负值#include <stdio.h>
#include <string.h>
void swap(char *a,char *b) /*交换两数*/
{
char temp;
int i;
for(i=0;i<10000;i++)
{
temp=a[i];
b[i]=a[i];
a[i]=temp;
}
}
int main ()
{
char a[10000],b[10000];
int i,j,len1,len2,min,max,t,jw=0,temp=0,ans[10001];
gets(a);//输入第一个数
gets(b);//输入第二个数
len1=strlen(a);
len2=strlen(b);
if(len1>10000||len2>10000)//防止溢出
return 0;
min=len1>len2?len2:len1;
max=len1>len2?len1:len2;
t=max-min;
i=max-1;
j=min-1;
if(max==len2)//保证长数为a
swap(a,b);
while(j>=0)//按位运算
{
temp=a[i]-'0'+b[j]-'0'+jw;
ans[i]=temp%10;
jw=temp/10;
i--;
j--;
}
a[t-1]=a[t-1]+jw;
for(i=0;i<t;i++)//将a中没进行运算的部分复制到ans中
ans[i]=a[i]-'0';
for(i=0;i<max;i++)//输出
printf("%d",ans[i]);
return 0;
}