支持正负数的大数乘法

#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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值