zoukankan      html  css  js  c++  java
  • 大数相乘 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("
    ");
    }
    
    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("
    ");
            printf("Case %d:
    ", cnt++);
            printf("%s * %s = ", A, B);
            put();
        }
        return 0;
    }
  • 相关阅读:
    【leetcode】反转字符串
    【leetcode】反转字符串 II
    053-669
    053-668
    053-667
    053-666
    053-665
    053-664
    053-663
    053-662
  • 原文地址:https://www.cnblogs.com/9968jie/p/5408769.html
Copyright © 2011-2022 走看看