Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
173603 A班--林奕朗 高精度乘法 C++ 无测评数据 0 0 MS 0 KB 1647 2024-08-20 22:00:04

Tests(0/0):


#include<iostream> #include<stdio.h> #include<algorithm> #include<string.h> #include<math.h> #define ip int i=0;i< #define iq ;i++ #define MLEN 5000 using namespace std; int a[2*MLEN+6],b[2*MLEN+6],c[2*MLEN+7]; char o10Print(int n){ if(n<10)return n-'0'; else return n-10+'A'; } void Scan(string _s,int rec[]){ memset(rec,0,sizeof(int)*MLEN*2); for(int i=_s.size()-1, j=0;i>=0;i--,j++){ rec[j]=_s[i]-'0'; } return ; } void Print(int rec[]){ // memset(rec,0,sizeof(int)*MLEN*2); int i=MLEN; while(i>0&&rec[i]==0)i--; for(;i>=0;i--){ cout<<rec[i]; } return ; } void Plus(int num1[],int num2[],int rec[]){ memset(rec,0,sizeof(int)*MLEN*2); for(int i=0;i<=MLEN;i++){ rec[i]+=num1[i]+num2[i]; if(rec[i]>=10){ rec[i+1]++; rec[i]%=10; } } } void Sub(int num1[],int num2[],int rec[]){ memset(rec,0,sizeof(int)*MLEN*2); for(int i=0;i<=MLEN;i++){ if(num1[i]>=num2[i])rec[i]+=num1[i]-num2[i]; else{ num1[i]+=10; num1[i+1]--; rec[i]+=num1[i]-num2[i]; } } } bool bigersstring(string _1st,string _2nd){ int fl=_1st.size(),sl=_2nd.size(); if(fl!=sl)return fl>sl; return _1st>_2nd; } void Mul(int num1[],int num2[],int rec[]){ memset(rec,0,sizeof(int)*MLEN*2); for(int i=0;i<=MLEN;i++){ for(int j=0;j<=MLEN;j++){ if(i+j+1<=MLEN){ rec[i+j]+=num1[i]*num2[j]; if(rec[i+j]>=10){ rec[i+j+1]+=rec[i+j]/10; rec[i+j]%=10; } } } } } int main(){ string s1,s2; cin>>s1>>s2; // if(bigersstring(s2,s1)){ // cout<<'-'; // swap(s1,s2); // } Scan(s1,a); Scan(s2,b); Mul(a,b,c); Print(c); return 0; }