两个超大整数相加
2006-07-26 15:18
274 查看
#include<iostream>
#include<vector>
using namespace std;
const int N = 1024;
void Revert(char* str)
{
assert(str != NULL);
int len = strlen(str);
char *p = str;
char *q = str + len -1;
while(p < q)
{
*p ^= *q;
*q ^= *p;
*p ^= *q;
++p;
--q;
}
}
int main()
{
vector<int> vec(N);
char str1
;
char str2
;
memset(str1,0,N);
memset(str2,0,N);
cout<<"Input the data1."<<endl;
scanf("%[0-9]",str1);
Revert(str1);
cout<<str1<<endl;
fflush(stdin);
cout<<"Input the data2."<<endl;
scanf("%[0-9]",str2);
Revert(str2);
cout<<str2<<endl;
int size1 = strlen(str1);
int size2 = strlen(str2);
int si;
int maxsize;
if(size1 <= size2)
{
si = size1;
}
else
{
si = size2;
}
int t;
int i;
for(i=0;i<si;++i)
{
t =( str1[i] - '0' ) + ( str2[i] - '0' );
if(t>9)
{
vec[i] += t % 10;
vec[i+1] += 1;
}
else
{
vec[i] = t;
}
}
if(si == size1)
{
for(i=si;i<size2;++i)
{
t = str2[i] - '0';
vec[i] += t;
}
}
else if(si == size2)
{
for(i=si;i<size1;++i)
{
t = str1[i] - '0';
vec[i] += t;
}
}
reverse(vec.begin(),vec.end());
si = vec.size();
int k=0;
while(vec[k++] == 0);
cout<<"The result is : ";
for(i=k-1;i<si;++i)
{
cout<<vec[i];
}
cout<<endl<<endl;
system("pause");
return 0;
}
#include<vector>
using namespace std;
const int N = 1024;
void Revert(char* str)
{
assert(str != NULL);
int len = strlen(str);
char *p = str;
char *q = str + len -1;
while(p < q)
{
*p ^= *q;
*q ^= *p;
*p ^= *q;
++p;
--q;
}
}
int main()
{
vector<int> vec(N);
char str1
;
char str2
;
memset(str1,0,N);
memset(str2,0,N);
cout<<"Input the data1."<<endl;
scanf("%[0-9]",str1);
Revert(str1);
cout<<str1<<endl;
fflush(stdin);
cout<<"Input the data2."<<endl;
scanf("%[0-9]",str2);
Revert(str2);
cout<<str2<<endl;
int size1 = strlen(str1);
int size2 = strlen(str2);
int si;
int maxsize;
if(size1 <= size2)
{
si = size1;
}
else
{
si = size2;
}
int t;
int i;
for(i=0;i<si;++i)
{
t =( str1[i] - '0' ) + ( str2[i] - '0' );
if(t>9)
{
vec[i] += t % 10;
vec[i+1] += 1;
}
else
{
vec[i] = t;
}
}
if(si == size1)
{
for(i=si;i<size2;++i)
{
t = str2[i] - '0';
vec[i] += t;
}
}
else if(si == size2)
{
for(i=si;i<size1;++i)
{
t = str1[i] - '0';
vec[i] += t;
}
}
reverse(vec.begin(),vec.end());
si = vec.size();
int k=0;
while(vec[k++] == 0);
cout<<"The result is : ";
for(i=k-1;i<si;++i)
{
cout<<vec[i];
}
cout<<endl<<endl;
system("pause");
return 0;
}
相关文章推荐
- 两个超大正整数相加问题之链表实现(代码惨不忍睹,慎进)
- 两个超大整数相加之数组实现
- 两个超大的整数相加(超过long长度范围)
- 两个超大整数相加(c++)
- 无限大的两个整数相加
- java中两个超大数相加以及BigInteger介绍
- 判断两个int类型的整数相加,相减是否溢出的C语言代码
- 超大整数相加,超过了long的范围,你要怎么做!
- 输入两个长整数相加算法
- 【android】快速判断int数组中两个整数相加等于指定的值
- ACM: A + B Problem II (两个大整数相加)
- 如何判断两个整数相加减是否溢出
- 任意两个整数相加
- 判断两个64位无符号整数a和b相加是否溢出
- 用单链表实现两个大型整数的相加
- 两个巨大整数相加
- 判断两个整数相加是否溢出的方法
- C++实现两个大整数的相加(考虑到负数异常情况)
- 两个超大正整数相减问题之链表实现