当运算的俩个数超过了int、float、double的时候,该如何运算呢?
简单例题:两个正整数,无限大,输出两个数相加的结果。
思想:表示无限大的数,只有使用字符串来表示了,所以使用字符串来模拟计算过程是大数处理的过程。
#include <iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
char* add(char *a,char *b)
{
int la=strlen(a);
int lb=strlen(b);
int lc=0;
int flag=0;//进位标志
if(la>lb)//计算输出字符串的最大长度(进位的话多一位)
{
lc=la+1;
}
else{
lc=lb+1;
}
char *c=(char *)malloc(lc+1);//+1是因为字符串末位要有'\0'占一位’
c[lc+1]='\0';
la--;lb--;lc--;//la lb lc变为计数器
//加法计算方法为从末位依次向前加
while (la>=0&&lb>=0) {
c[lc]=(a[la]-'0'+b[lb]-'0'+flag)%10+'0';//ascii值与'0'相减
flag=(a[la]-'0'+b[lb]-'0'+flag)/10;//是否进位+1
la--;lb--;lc--;
}
while (la>=0) {
c[lc]=(a[la]-'0'+flag)%10+'0';
flag=(a[la]-'0'+flag)/10;
la--;lc--;
}
while (lb>=0) {
c[lc]=(b[lb]-'0'+flag)%10+'0';
flag=(b[lb]-'0'+flag)/10;
lb--;lc--;
}
//当a、b都加完毕 还进位的话就是首位就是1否则就是0
c[0]='0'+flag;
if(c[0]=='0'){
return c+1;
}else{
return c;
}
}
int main(void)
{
char a[50];
char b[50];
gets(a);
gets(b);
char *c=add(a,b);
cout<<c<<endl;
return 0;
}
这只是简单应用,但表明了大数处理的思想,更多的考虑还有 仅仅是整数呢?仅仅是实数呢?相减呢?
但本质上都是利用字符串、ascii码来处理的。