高精度——乘法

http://acm.nefu.edu.cn/JudgeOnline/problemshow.php?problem_id=590

description

给出一些整数对,一个为可能接近100位的大数,另一个为1位数,求这些数对的乘积。
							

input

输入数据有多组,每组2个数.
							

output

输出每组2个数的乘积,输出后要换行.
							

sample_input

1 1
123 0
12345678910 8
123456789101234567891012345678910 7

自己的写法:(对于本题不是最好的,我是想借此熟悉一下高精度乘法,这个适用于任意两个正整数相乘)

处理手段:先相乘,后进位。
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
int lsum;
void cheng(int *sum,char *a,char *b)
{
    int n=strlen(a);
    int m=strlen(b);
    int i,j;
    lsum=0;
    for(i=0; i<n/2; i++)
        swap(a[i],a[n-1-i]);
    for(i=0; i<m/2; i++)
        swap(b[i],b[m-1-i]);
    for(i=0; i<n; i++)
        for(j=0,lsum=i; j<m; j++)
            sum[lsum++]+=(b[j]-'0')*(a[i]-'0');
    for(i=0; i<lsum; i++)
    {
        if(sum[i]>9)
        {
            if(sum[lsum-1]>9)
                lsum++;
            sum[i+1]+=sum[i]/10;
            sum[i]%=10;
        }
    }
    for(i=0; i<lsum/2; i++)
        swap(sum[i],sum[lsum-1-i]);
}
int main()
{
    char a[1005],b[1005];
    int c[10000];
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    while(~scanf("%s%s",a,b))
    {
        memset(c,0,sizeof(c));
        cheng(c,a,b);
        if(c[0]==0)
           cout << "0\n";
        else
        {
        for(int i=0; i<lsum; i++)
            cout << c[i];
        cout << endl;
        }
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
    }
    return 0;
}


你可能感兴趣的:(高精度——乘法)