您的位置:首页 > 编程语言 > C语言/C++

C++大数运算之加法,减法

2014-09-22 10:15 639 查看
//太简单不解释加法
#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdio.h>
using namespace std;
#define maxlen 201
int a[maxlen+2];
int b[maxlen+2];
char asize[maxlen+2];
char bsize[maxlen+2];
int add(int maxn,int *a,int *b)
{
int flag=0;
for(int i=0;i<maxn;i++)
{
a[i]=a[i]+b[i];
if(a[i]>=10)
{
a[i]-=10;
a[i++]++;
}
if(a[i]>0)
flag=i;
}
return flag;
}
int main()
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
// cin>>*asize;
//cin.ignore();
// cin>>*bsize;
scanf("%s",asize);
scanf("%s",bsize);
int la=strlen(asize);
int lb=strlen(bsize);
for(int i=0;i<la;i++)
a[i]=asize[i]-'0';
for(int i=0;i<lb;i++)
b[i]=bsize[i]-'0';
int len=max(la,lb);
int f=add(len,a,b);
for(int i=f;i>=0;i--)
cout<<a[i];
cout<<endl;

}
//减法
#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdio.h>
using namespace std;
#define maxlen 201
int a[maxlen+2];
int b[maxlen+2];
char asize[maxlen+2];
char bsize[maxlen+2];
int sub(int maxn,int *a,int *b)
{
int flag=0;
for(int i=0;i<maxn;i++)
{
a[i]=a[i]-b[i];
if(a[i]<0)
{
a[i]+=10;
a[i++]--;
}
if(a[i]>0)
flag=i;
}

return flag;
}
int main()
{

// cin>>*asize;
//cin.ignore();
// cin>>*bsize;
scanf("%s",asize);
scanf("%s",bsize);

int la=strlen(asize);
int lb=strlen(bsize);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(int i=0,j=la-1;j>=0;)
a[i++]=asize[j--]-'0';
for(int i=0,j=lb-1;j>=0;)
b[i++]=bsize[j--]-'0';
int len=max(la,lb);
int f=sub(len,a,b);
printf("\n%s -",asize);
printf("%s =\n",bsize);
/*for(int i=0;i<la;i++)
cout<<a[i];

for(int i=0;i<lb;i++)
cout<<b[i];

// cout<<*bsize<<" "<<*b<<endl;*/
for(int i=f;i>=0;i--)
cout<<a[i];
cout<<endl;

}
减法部分需要注意的是,将字符串反转。这里没有考虑负数的情况,而且默认是a数组放大数,只要再写一个函数,判断一下a,b的大小和符号就可以啦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: