高精度算法之乘法

Description

输入两个高精度整数M和N(M和N均不小于0且不超过100位)。求这两个高精度数的积。

Input

每一组测试数据占2行,一行一个整数

Output

每一组测试数据输出占一行,输出乘积

Sample Input

36 3

Sample Output

108

思路:典型的高精度问题,两个变量控制结果,i和j控制sum数组,并考虑进位,两个数的最大位就是两个位数加起来,最后输出时把前面的零去掉.(建议手动写一下过程)

代码如下:

#include<iostream>
#include<cstring>
using namespace std;

char num_1[101],num_2[101];
int Num_1[101],Num_2[101],Sum[10001];

int main(){
    while(cin>>num_1>>num_2){
    memset(Sum,0,sizeof(Sum));
    int length_1 = strlen(num_1);
    int length_2 = strlen(num_2);
    for(int i=0;i<length_1;i++)
        Num_1[length_1-i-1] = num_1[i]-48;
    for(int i=0;i<length_2;i++)
        Num_2[length_2-i-1] = num_2[i]-48;
    for(int i=0;i<length_1;i++)
    {
        int x=0;
        for(int j=0;j<length_2;j++){
            Sum[i+j] = Num_1[i]*Num_2[j]+x+Sum[i+j];
            x=Sum[i+j]/10;
            Sum[i+j] = Sum[i+j]%10;
        }
        Sum[i+length_2] = x;
    }
    int length_3 = length_1 + length_2;
    while(Sum[length_3]==0&&length_3>0){
        length_3--;
    }
    for(int i=length_3;i>=0;i--)
        cout<<Sum[i];
        cout<<endl;

    }

}
发布了69 篇原创文章 · 获赞 50 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq873044564/article/details/89003774