#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; }
使用数组实现大整数加法
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Java 中数组的使用(一维数组和二维数组)
本文详细的介绍了,在Java 中数组的使用,并对其内存存在形式进行了详细的分析。
数组 一维数组 二维数组 java基础 -
大整数运算加法
比赛中常常会
i++ 大整数 ios -
PHP 大数字加法 大整数加法
PHP 大数字加法 大整数加法
PHP 加法 大数字 -
3612、数组形式的整数加法
整数的 数组形式 num 是按照从左到右的顺序表示其数字的数组。
蓝桥杯 散列表 职场和发展 List 数组 -
1198.a+b(大整数加法)
实现一个加法器,使其能够输出a+b的值。 输入包括两个数a和b,其中a和b的位数不超过1000位。 可能有多组测试数据,对于每组数据, 输出a+b的值。
git #include i++ 初始化 测试数据