使用数组实现大整数加法
[cpp]
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<ctype.h>
using namespace std;
char* add(const char *arr,const char *brr)
{
//求两个加数的较大值即串较长的
int lena=strlen(arr);
int lenb=strlen(brr);
int maxlen=(lena<lenb)?lenb:lena;
/*为计算结果分配存储空间 较大加数长度maxlen 考虑进位结果长度为 mxlen+1
再考虑上字符串结束标志'\0',所以申请空间大小是malloc(maxlen+2);*/
char* sum=(char*)malloc(maxlen+2);
memset(sum,'0',maxlen+1);// 初始化堆内存
sum[maxlen+1]='\0'; //字符串结束标志
int cin=0,k=0; //进位初始化为0
while(lena-->0 && lenb-->0) //一直计算到较短字符串加数结束
{
int left=arr[lena]-'0'; // 字符转化为数字
int right=brr[lenb]-'0'; // 字符转化为数字
int s=left+right+cin;
cin=s/10;
s%=10;
sum[k++]=s+'0';
}
if(lena<=0) //字符串a先结束
{
while(lenb-->0)
{
int left=0;
int right=brr[lenb]-'0';
int s=left+right+cin;
cin=s/10; //C是进位
s%=10;
sum[k++]=s+'0';
}
}
else if(lenb<=0)
{
while(lena-->0)
{
int left=arr[lena]-'0';
int right=0;
int s=left+right+cin;
cin=s/10;
s%=10;
sum[k++]=s+'0';
}
}
/*下边两句话的意思是:
如果没有产生进位,则最高位0多余不写入
结果中,长生进位的话则把进位也写入结果中*/
if(cin!=0)
sum[k++]=cin+'0';
//及时添加字符串结束标志给现编字符串翻转函数做准备
sum[k]='\0';
strrev(sum); //字符串翻转
return sum;
}
int main()
{
char a[]="20085121428"; //纪念汶川大地震
char b[]="20134200802"; //为雅安地震祈福
char result[100]={0};
memset(result,'0',sizeof(result));
char *p=add(a,b);
cout<<"result is "<<p<<endl;
free(p);
p=NULL;
}
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<ctype.h>
using namespace std;
char* add(const char *arr,const char *brr)
{
//求两个加数的较大值即串较长的
int lena=strlen(arr);
int lenb=strlen(brr);
int maxlen=(lena<lenb)?lenb:lena;
/*为计算结果分配存储空间 较大加数长度maxlen 考虑进位结果长度为 mxlen+1
再考虑上字符串结束标志'\0',所以申请空间大小是malloc(maxlen+2);*/
char* sum=(char*)malloc(maxlen+2);
memset(sum,'0',maxlen+1);// 初始化堆内存
sum[maxlen+1]='\0'; //字符串结束标志
int cin=0,k=0; //进位初始化为0
while(lena-->0 && lenb-->0) //一直计算到较短字符串加数结束
{
int left=arr[lena]-'0'; // 字符转化为数字
int right=brr[lenb]-'0'; // 字符转化为数字
int s=left+right+cin;
cin=s/10;
s%=10;
sum[k++]=s+'0';
}
if(lena<=0) //字符串a先结束
{
while(lenb-->0)
{
int left=0;
int right=brr[lenb]-'0';
int s=left+right+cin;
cin=s/10; //C是进位
s%=10;
sum[k++]=s+'0';
}
}
else if(lenb<=0)
{
while(lena-->0)
{
int left=arr[lena]-'0';
int right=0;
int s=left+right+cin;
cin=s/10;
s%=10;
&n
补充:软件开发 , C++ ,