任意长度数字的加法

来源:互联网 发布:女朋友漂亮知乎 编辑:程序博客网 时间:2024/05/22 18:23

在C/C++中用int,float,double等类型表示数字,但是它们长度都是有限的。如果要求数字是任意长度,则可以用字符串表示数字,同样也用字符串表示结果。

代码如下:

#include <iostream>#include <cstring>#include <cstdlib>#include <cmath>using namespace std;char *addBigInt(char *num1,char *num2){int c=0;//进位,开始最低进位为0;int len1=strlen(num1);int len2=strlen(num2);int i=len1-1;//指向第一个加数的最低位int j=len2-1;//指向第二个加数的最低位int maxLength= (len1>=len2) ? (len1+1) : (len2+1); //得到两个数中较大数的位数char *rst=(char*)malloc(maxLength+1);//保存结果int k;if(rst==NULL){cout<<"malloc error\n"<<endl;return NULL;}rst[maxLength]='\0';//字符串最后一位为‘\0’k=strlen(rst)-1;//指向结果数组的最低位while(i>=0 && j>=0){rst[k]=((num1[i]-'0')+(num2[j]-'0')+c)%10+'0';//计算本位值c=((num1[i]-'0')+(num2[j]-'0')+c)/10;//向高位进位值--i;--j;--k;}while(i>=0){rst[k]=((num1[i]-'0')+c)%10+'0';c=((num1[i]-'0')+c)/10;--i;--k;}while(j>=0){rst[k]=((num2[j]-'0')+c)%10+'0';c=((num2[j]-'0')+c)/10;--j;--k;}rst[0]=c+'0';//如果结果最高位不等于0,则输出结果if(rst[0]!='0'){return rst;}else{return rst+1;}}

int main(){char num1[]="123456789456";char num2[]="45671254563123";char *result=NULL;result=addBigInt(num1,num2);cout<<num1<<" + "<<num2<<" = "<<result<<endl;return 0;}
上述程序的运行结果如下图:




原创粉丝点击