C语言实现高精度(大位数)乘法

1.正负号处理

int flaga=1;
    if(s1[0]=='-'){
        flaga=0;
        strcpy(s1,&s1[1]);
    }
if((flaga&&!flagb)||(!flaga&&flagb))
        putchar('-');

2.最不利原则

int len=lena+lenb;

3.进位处理

c[i+j]=a[i]*b[j]+jw+c[i+j];
            jw=c[i+j]/10;
            c[i+j]%=10;

源码

#include 
#include 
#define Max 3000
void multiply(char s1[],char s2[]);
int main()
{
    char s1[Max];
    char s2[Max];
    scanf("%s %s",s1,s2);
    multiply(s1,s2);
}
void multiply(char s1[],char s2[]){
    int flaga=1;
    if(s1[0]=='-'){
        flaga=0;
        strcpy(s1,&s1[1]);
    }
    int flagb=1;
    if(s2[0]=='-'){
        flagb=0;
        strcpy(s2,&s2[1]);
    }
    int a[Max];
    int b[Max];
    int c[Max]={0};
    int lena=strlen(s1);
    for(int i;i<lena;i++)
        a[i]=s1[lena-i-1]-'0';
    int lenb=strlen(s2);
    for(int i;i<lenb;i++)
        b[i]=s2[lenb-i-1]-'0';
    int len=lena+lenb;
    for(int i=0;i<lena;i++){
        int jw=0;
        for(int j=0;j<lenb;j++){
            c[i+j]=a[i]*b[j]+jw+c[i+j];
            jw=c[i+j]/10;
            c[i+j]%=10;
        }
        c[lenb+i]=jw;
    }
    if((flaga&&!flagb)||(!flaga&&flagb))
        putchar('-');
    for(int i=len-1;i>=0;i--){
        if(c[i]==0&&len>1)
            len--;
        else
            break;
    }
    for(int i=len-1;i>=0;i--)
        printf("%d",c[i]);
}

以上代码仅供参考

你可能感兴趣的:(数据结构与算法)