蓝桥杯 —— P1001 —— 大数相乘

来源:互联网 发布:originlab mac 破解 编辑:程序博客网 时间:2024/06/14 13:17


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 100010using 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;}




0 0