任意长度数字的加法
来源:互联网 发布:女朋友漂亮知乎 编辑:程序博客网 时间: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;}上述程序的运行结果如下图:
阅读全文
0 0
- 任意长度数字的加法
- 任意长度的高精度大整数加法
- 任意长度的高精度大整数加法
- 任意长度的高精度大整数加法
- 任意长度正整数加法
- 任意大数字加法的python实现
- 任意长度的整数加法C语言代码
- 经典算法11:任意长度整数加法
- 用C语言实现的一个可以计算任意长度整数加法的小程序
- 任意长度的高精度大整数和浮点数的加法和乘法
- 任意长度的正小数的加法(YT新人之巅峰大决战05)
- 数组长度101,多余的数字是0到99其中任意一个数
- 生成一个任意长度的随机字符串,包含数字和字母[C语言]
- 任意数字的排列
- 任意长度的字符串输入
- 任意长度的字符串输入
- 任意长度的字符串输入
- 生成任意长度的随机数
- INT_MAX
- 战马列队
- 287. Find the Duplicate Number / 142. Linked List Cycle II(Java)
- Java 4.0 java 引用数据类型之数组
- 007.Net基础教程之复杂数据类型
- 任意长度数字的加法
- [Leetcode-22]Generate Parentheses 生成圆括号
- MongoDB聚合篇
- 问题 E: QAQ & 君临天下 || 天行九歌||多校联萌(三)
- 聚类分析经典算法讲解及实现
- 线性求区间欧拉函数(顺便线性求区间内所有素数)(类似欧拉线性素数筛)
- 微调-模型
- ACM暑假集训日记 17.8.11
- BZOJ 2818 Gcd + spoj 4491(莫比乌斯反演 分块)