当运算的俩个数超过了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码来处理的。