大数相乘 a*b

//zznu 1562
//用数组模拟乘法计算的过程
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<ctype.h>
#include<algorithm>
using namespace std;
#define N 500
#define INF 0x3f3f3f3f

int sum[N], len1, len2;

void solve(char a[], int b[])
{
    int len=strlen(a), k;
    k=0;
    for(int i=len-1; i>=0; i--)
        b[k++]=a[i]-'0';
}

void mul(int num, int b[], int k)
{
    for(int i=0; i<len2; i++)
        sum[k++]+=b[i]*num;
    for(int i=0; i<len2+len1; i++)
    {
        sum[i+1]+=sum[i]/10;
        sum[i]%=10;
    }
}

void put()
{
    int i=N-1;
    while(!sum[i]) i--;
    printf("%d", sum[i]);
    for(i--; i>=0; i--)
        printf("%d", sum[i]);
    printf("\n");
}

int main()
{
    char A[N], B[N];
    int T;
    int a[N], b[N], cnt=1;
    scanf("%d", &T);
    getchar();

    while(T--)
    {
        scanf("%s%s", A, B);
        solve(A, a);
        solve(B, b);
        len1=strlen(A);
        len2=strlen(B);
        memset(sum, 0, sizeof(sum));
        for(int i=0; i<len1; i++)
            mul(a[i], b, i);
        if(cnt>1)
            printf("\n");
        printf("Case %d:\n", cnt++);
        printf("%s * %s = ", A, B);
        put();
    }
    return 0;
}

 

posted on 2016-04-19 16:36  南风丶丶  阅读(204)  评论(0编辑  收藏  举报