大数相加

来源:互联网 发布:淘宝怎么和快递合作 编辑:程序博客网 时间:2024/06/01 10:24
#include<iostream>
#include<string.h>
#define Max 201
using namespace std;
void print(char sum[])
{
int i=0;
int j=0;
int len = strlen(sum);
for (i=len-1;sum[i]==0;i--); //找到第一个不为零的位置,方便输出
for (j=i;j>=0;j--)
{
cout<<sum[j];
}
    cout<<endl;
}
void bigNumAdd(char a[],char b[],char sum[])
{
int i=0;
int c=0;//表示进位
          //初始化,对以后位运算有很大帮助!
char m[Max]={0};
char n[Max]={0};
memset(sum,0,Max*sizeof(char)); //这里不能写成memset(sum,0,sizeof(sum));原因见注意事项1
//字符串反转且字符串变数字
int lenA=strlen(a);
int lenB=strlen(b);
for (i=0;i<lenA;i++)
{
m[i]=a[lenA-i-1]-'0';
}
for (i=0;i<lenB;i++)
{
n[i]=b[lenB-i-1]-'0';
}
//位运算
for (i=0;i<lenA||i<lenB;i++)
{
sum[i]=(m[i]+n[i]+c)%10+'0';//得到末位
c=(m[i]+n[i]+c)/10;//得到进位
}
}
int main()
{
char a[Max];
char b[Max];
char sum[Max];
cout<<"请输入a:"<<endl;
gets(a);
cout<<"请输入b:"<<endl;
gets(b);
bigNumAdd(a,b,sum);
cout<<"结果:"<<endl;
print(sum);
return 0;
}
 


 
























/*#include<iostream>
#include<string.h>
#define Max 201
using namespace std;
void printRes(char r[])
{
int i=0,j=0;
int len=strlen(r);
for(i=len-1;r[i]==0;i--);
for(j=i;j>=0;j--)
{
cout<<r[i];
}
cout<<endl;


}
void Add(char a[],char b[],char r[])
{
int i=0;
int j=0;
char m[Max]={0};
char n[Max]={0};
memset(r,0,Max*sizeof(char));
int lenA=strlen(a);
int lenB=strlen(b);
for(i=0;i<lenA;i++)
{
m[i]=m[lenA-i-1]-'0';
}
for(i=0;i<lenB;i++)
{
n[i]=n[lenA-i-1]-'0';
}
for(i=0;i<lenA||i<lenB;i++)
{
r[i]=(m[i]+n[i]+j)%10+'0';
j=(m[i]+n[i]+j)/10;
}
}


int main()
{
char a[Max];
char b[Max];
char r[Max];
cout<<"请输入a:"<<endl;
gets(a);
cout<<"请输入b:"<<endl;
gets(b);
Add(a,b,r);
cout<<"结果:"<<endl;
printRes(r);
return 0;
}*/
0 0