支持正负数的大数乘法

#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);
}

你可能感兴趣的:(支持)