source:https://blog.csdn.net/rtduq/article/details/79954816
大数指的是超过系统能处理的最大整数,比如32位系统int类型最大值是2147483647,但实际情况中我们需要处理的数据可能是20位、50位、100位,所以一般使用字符串而不是整型数来做运算,这里做的是最简单的加法,由加法我们后面可以扩展到减法、乘法、除法等。
#include "stdafx.h"
#include "stdio.h"
#include "string.h"
//1位加法,f表示进位
int addchar(char c1,char c2,int f,char &s){
int t=c1+c2+f;
if(t<106){
s=(char)(t-48);
return 0;
}else{
s=(char)(t-58);
return 1;
}
}
//大数相加
void bignumadd(const char* num1,const char* num2,char* sum){
size_t len1=strlen(num1),len2=strlen(num2),i=0;//得到输入字符串长度
int f=0;//用于保存进位
if(len1>len2){//如果第一个字符串长
//len2比较小,先遍历完
for(i=0;i
{
f=addchar(num1[len1-i-1],num2[len2-i-1],f,sum);
}
//剩下部分
for(;i
{
f=addchar(num1[len1-i-1],'0',f,sum);//第一个字符串多出来的直接和0加
}
}else{//如果第二个字符串长
for(;i
f=addchar(num1[len1-i-1],num2[len2-i-1],f,sum);
}
for(;i
f=addchar('0',num2[len2-i-1],f,sum);//第二个字符串多出来的直接和0加
}
}
//别忘记最高位还可能会进位
for(;f>0;++i){
f=addchar('0','0',f,sum);
}
}
void showsum(const char* s){//显示计算结果
size_t len=strlen(s);
for(int i=len-1;i>-1;--i){//从最后一位开始逆序输出
putchar(s);
}
}
int main() {
const char* num1="8799999999999999999";
const char* num2="9999888888888888";
char s[100000]={0};//分配栈空间存放结果
bignumadd(num1,num2,s);
showsum(s);
getchar();
return 0;
}
zhanglii2011_392530165 2019-3-19 14:53
443955496_148404734 2019-3-15 15:20