您的位置:首页 > 其它

大数相加

2016-05-17 20:38 211 查看
#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;

}*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: