1. 程式人生 > >高精度乘法——一步一步演算法篇

高精度乘法——一步一步演算法篇

高精度乘法
利用豎式計算的原理,注意錯位相加和進位。

這裡寫圖片描述

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
    int a[1000],b[1000],c[1000],lena,lenb,lenc,i,j,x;
    char a1[101],b1[101];
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    gets(a1);
    gets(b1);
    if
(b1[0]=='0') {cout<<"0";return 0;} //判斷乘數是不是0 lena=strlen(a1);lenb=strlen(b1); for(i=0;i<=lena-1;i++) a[lena-i]=a1[i]-48; //將乘數放入a陣列 for(i=0;i<=lenb-1;i++) b[lenb-i]=b1[i]-48; //將另一個乘數放入b陣列 for (i=1;i<=lena;i++) { x=0; //存放進位 for (j=1;j<=lenb;j++) { c[i+j-1
]=a[i]*b[j]+x+c[i+j-1]; //當前乘積+上次乘積進位+原數 x=c[i+j-1]/10; c[i+j-1]%=10; } c[i+lenb]=x; //進位 } lenc=lena+lenb; while (c[lenc]==0&&lenc>0) lenc--; //除去前導0 for (i=lenc;i>=1;i--) cout<<c[i]; cout<<endl; return 0; }

一步一步演算法篇