高精度乘法(压位)

#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<string.h>

const int dmax=10000;
int a[dmax],b[dmax],c[dmax],t[dmax],t1[dmax];
char s[dmax];

int main(){
    int i,j,k,m,n,x,y;
    gets(s);
    x=strlen(s);
    for (i=0;i<x;i++)
        a[i+1]=s[x-i-1]-48;
    for (i=x;i>=1;i--){
        t[i/3+i%3==0?0:1]=t[i/3+i%3==0?0:1]*10+a[i];
    }
    x=x/3+x%3==0?0:1;
	for (i=1;i<=x;i++)
		a[i]=t[i];
    gets(s);
    y=strlen(s);
    for (i=0;i<y;i++)
        b[i+1]=s[y-i-1]-48;
    for (i=y;i>=1;i--){
        t1[i/3+i%3==0?0:1]=t1[i/3+i%3==0?0:1]*10+b[i];
    }
    y=y/3+y%3==0?0:1;
	for (i=1;i<=y;i++)
		b[i]=t1[i];
    n=x>y?x:y;
    for (i=1;i<=x;i++)
        for (j=1;j<=y;j++)
            c[i+j-1]=a[i]*b[j];
    for (i=1;i<dmax;i++){
        c[i+1]+=c[i]/1000;
        c[i]%=1000;
    }
	n=dmax;
    while (c[n]==0 && n>1) n--;
    for (i=n;i>=1;i--){
		if (c[i]<100 && i!=n)
			printf("0");
		if (c[i]<10 && i!=n)
			printf("0");
		printf("%d",c[i]);
	}
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值