藍橋杯 —— P1001 —— 大數相乘


83分..


#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <map>
#include <sstream>
#include <queue>
#include <stack>
#include <vector>
#define INF 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
#define For(a,b) for(int i = a;i<b;i++)
#define ll long long
#define MAX_N 100010
using namespace std;

char ans[35];
void reserve(char *p,int l,int r)
{
    while(l < r)
    {
        char tmp = p[l];
        p[l] = p[r];
        p[r] = tmp;
        l ++;
        r --;
    }
    return ;
}
void muti(char *a,char *b)
{
    int n = strlen(a);
    int m = strlen(b);
    //fill(ans,ans+n+m,'0');
    memset(ans,'0',m+n);
    ans[m+n] = '\0';
    reserve(a,0,n-1);
    reserve(b,0,m-1);
    int mutimod = 0,addmod = 0;
    for(int i = 0; i<n; i++)
    {
        mutimod = 0;
        addmod = 0;
        for(int j = 0; j<m; j++)
        {
            int tmp1 = (a[i]-48)*(b[j]-48)+mutimod;
            mutimod = tmp1 / 10;
            tmp1 %= 10;
            int tmp2 = (ans[i+j]-48)+tmp1+addmod;
            addmod = tmp2 / 10;
            ans[i+j] = tmp2 % 10 + 48;
        }
        ans[i+m] += mutimod+addmod;
    }
    reserve(ans,0,m+n-1);
    return ;
}
int main()
{
    char a[20],b[20];
    scanf("%s%s",a,b);
    muti(a,b);
    if(ans[0] != 48) printf("%c",ans[0]);
    for(int i = 0; i<strlen(a)+strlen(b); i++)
    {
        printf("%c",ans[i]);
    }
    printf("\n");
    return 0;
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章