- 高精度乘法
- 2016-11-26 15:21:42 @
#include <cstdio>
#include <iostream>
#include<cstring>
using namespace std;
void cvt(char str[],int a[]) {
int i,n=strlen(str),j=1,k=1;
for(i=1; i<=n; i++) {
if(k==10000) {
k=1;
j++;
}
a[j]+=(str[n-i]-'0')*k;
k*=10;
}
a[0]=j;
}
void add(int a[],int b[],int c[]){
int i,len=a[0]>b[0]?a[0]:b[0];
for(i=1;i<=len;i++){
c[i]+=a[i]+b[i];
c[i+1]+=c[i]/10000;
c[i]%=10000;
}
len++;
while(len>1&&c[len]==0)len--;
c[0]=len;
}
void mult(int a[],int b[],int c[]){
int i,j,len;
for(i=1;i<=a[0];i++){
for(j=1;j<=b[0];j++){
c[i+j-1]+=(a[i]*b[j]);
c[i+j]+=c[i+j-1]/10000;
c[i+j-1]%=10000;
}
}
len=a[0]+b[0]+1;
while(len>1&&c[len]==0)len--;
c[0]=len;
}
int cmp(int a[],int b[]){
int i;
if(a[0]!=b[0]) return a[0]-b[0];
for(i=a[0];i>=1;i--){
if(a[i]!=b[i])return a[i]-b[i];
}
return 0;
}
int main() {
char s[2000];
int x[100]={0},y[100]={0},z[100]={0},i;
cin>>s;
cvt(s,x);
cin>>s;
cvt(s,y);
mult(x,y,z);
printf("%d",z[z[0]]);
for(i=z[0]-1;i>=1;i--){
printf("%04d",z[i]);
}
cout<<cmp(x,y);
return 0;
}
1 条评论
-
刘锦钰是超神.. LV 8 @ 2016-11-30 06:47:06
那里错了!!!
- 1