您的位置:首页 > 编程语言 > C语言/C++

大数运算之加法和乘法算法C++模板

2017-06-22 15:08 627 查看
大数加法:

void caladd(char *a,char *b,char *res)
{
int lena=strlen(a);
int lenb=strlen(b);
int i=lena-1,j=lenb-1,k=0;
while( (i+1) || (j+1) )
{
if(i!=-1) res[k] += (a[i--]-'0');
if(j!=-1) res[k] += (b[j--]-'0');
res[k+1] += res[k]/10;
res[k++] %= 10;
}
while(!res[k]&&k>1)k--;
if(res[k])k++;
res[k]=0;
for(int s=k-1; s>=0; s--)
res[s]+='0';
for(int s=0; s<=(k-1)/2; s++)
swap(res[s],res[k-1-s]);
}


大数乘法:

void calmutiply(char *a, char *b , char *res)
{
int lena=strlen(a);
int lenb=strlen(b);
int k=0;
for(int i=0;i<lena; i++)
for(int j=0; j<lenb; j++)
{
res[i+j]+=(int)((a[lena-1-i]-'0')*(b[lenb-1-j]-'0'));
if(res[i+j]>9)
{
res[i+j+1]+=res[i+j]/10;
res[i+j]%=10;
if(i+j+1>k)k=i+j+1;
}
else if(res[i+j]&&i+j>k)k=i+j;
}
for(int s=k; s>=0; s--)
res[s]+='0';
for(int s=0;s<=k/2;s++)
swap(res[s],res[k-s]);
}


推荐大数运算用Java(当然Python也行), C++的确实难写, 并且局限性很高. 位数大了要计算很久.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: