高精度运算
不管是int还是double亦或者long long ,这些定义变量都有数据范围的一定限制,在计算位数超过十几位的数,也就是超过他们自身的数据范围时,不能采用现有类型进行计算,只能自己通过编写程序进行计算也就是高精度运算。
程序代码

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    char a1[205],b1[205];//数组用来存储两个相加的数 
    int a[205],b[205],c[205],lena,lenb,lenc=1,i,x=0;
    memset(a,0,sizeof(a));//对字符串初始化 
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    gets(a1);
    gets(b1);
    lena=strlen(a1);//将数组长度赋值给len 
    lenb=strlen(b1);
    for(i=0;i<lena;i++)
    a[lena-i]=a1[i]-'0';//将字符串通过ASCALL值转化为整形变量 
    for(i=0;i<lenb;i++)
    b[lenb-i]=b1[i]-'0';//通过倒序使数组两端的值互换 
    while(lenc<=lena||lenc<=lenb)
    {
        c[lenc]=a[lenc]+b[lenc]+x;
        x=c[lenc]/10;
        c[lenc]%=10;
        lenc++;
    }
    c[lenc]=x;
    while(c[lenc]==0)//最高位的0要舍弃 
    {
        lenc--;
    }
    for(i=lenc;i>=1;i--)
    {
        cout<<c[i];
    }
    cout<<endl;
    return 0;
}

需要注意的地方
当一个输入的数据超过定义变量所支持的数据范围时(比如400位的数,一亿是9位数),用数组的方法更容易求所需求的的数据,用数组的一个空间来当作数的位数,即个位十位百位。这样用一个数组来储存一个数据,支持计算的数据范围更大,也简单易懂。
代码解读
memset() 函数常用于内存空间初始化,在代码的开头,我使用了memset()对数组进行初始化,即对数组a,b,c全部赋值为0。注意不能用它将int数组初始化为0和-1之外的其他值(除非该值高字节和低字节相同)。在数组的创建之后,数组内剩余的空间会出现野值,若不清零,则在函数进行运算时会出现乱码。由于数组类型定义时是字符型,所以需要写一段代码进行转化,使之变为整形变量,使用高精度计算,数据的存入也有特殊方法,即倒序存入,通常开头第一个数据输入值是表示整个数据的长度,比如八位数据,则键入8。之后的数据从最高位到最低位一个一个排开单个键入。