#include <stdio.h>
#include <string.h>
#define N 1000//最大1000位
int input(char n[]){
char s[N],temp;
int i,j,positive;
scanf("%s",s);
j=strlen(s);
for(i=0;i<N;i++){
n[i]=0;
}
if(s[0]=='-'){
positive=-1;
for(i=0;i<j-1;i++){
temp=s[i];s[i]=s[i+1];s[i+1]=temp;
}
j=j-1;
}else{
positive=1;
}
for(i=0;i<j;i++){
n[i]=s[j-i-1]-'0';
}
return positive;
}
int multi(char p[],char q[],char r[],int posi1,int posi2){
int i=0,j=0;;
for(i=0;i<N;i++){
r[i]=0;
}
for(i=0;i<strlen(p);i++)
for(j=0;j<strlen(q);j++){
r[i+j]+=p[i]*q[j];
if(r[i+j]>=10){
r[i+j+1]+=r[i+j]/10;
r[i+j]=r[i+j]%10;
}
}
if(posi1*posi2==1)
return 1;
else
return -1;
}
void output(char r[],int positive){
int i=0;
for(i=N-1;i>=0;i--){
if(r[i]!=0)
break;
}
if(positive==-1){
printf("-");
}
for(;i>=0;i--){
printf("%d",r[i]);
}
putchar('\n');
}
void main(){
char p[N],q[N],r[N];
int posi1,posi2,res1;
posi1=input(p);
posi2=input(q);
output(p,posi1);
output(q,posi2);
res1=multi(p,q,r,posi1,posi2);
output(r,res1);
}
支持正负数的大数乘法
最新推荐文章于 2017-11-05 15:54:59 发布