高精度乘法
1 /* 2 高精度乘法(无负数) 3 结构体初始化 4 定义去除前导0函数 5 重载赋值符号、乘号 6 定义字符串输出函数 7 重载输入输出 8 */ 9 #include<bits/stdc++.h> 10 using namespace std; 11 const int maxn=10000; 12 struct bign{ 13 int d[maxn],len; 14 inline bign() {len=1;memset(d,0,sizeof(d));} 15 inline void clean() {while(len>1&&!d[len-1]) len--;} 16 inline bign operator = (const char* num) 17 { 18 len=strlen(num); 19 memset(d,0,sizeof(d)); 20 for(int i=0;i<len;i++) d[i]=num[len-i-1]-48; 21 return *this; 22 } 23 inline bign operator * (const bign &b) 24 { 25 bign c; 26 c.len=len+b.len; 27 for(int i=0;i<len;i++) 28 { 29 int x=0; 30 for(int j=0;j<b.len;j++) 31 { 32 c.d[i+j]+=x+d[i]*b.d[j]; 33 x=c.d[i+j]/10; 34 c.d[i+j]%=10; 35 } 36 c.d[i+b.len]=x; 37 } 38 c.clean(); 39 return c; 40 } 41 inline string str() const 42 { 43 char s[maxn]={}; 44 for(int i=0;i<len;i++) s[len-i-1]=d[i]+48; 45 return s; 46 } 47 }a,b; 48 inline istream& operator >> (istream &in,bign &x) 49 { 50 char s[maxn]={}; 51 in>>s; 52 x=s; 53 return in; 54 } 55 inline ostream& operator << (ostream &out,const bign &x) 56 { 57 out<<x.str(); 58 return out; 59 } 60 int main() 61 { 62 cin>>a>>b; 63 cout<<a*b; 64 return 0; 65 }