大数相乘

来源:互联网 发布:京东词条优化 编辑:程序博客网 时间:2024/05/18 01:50
/****** big_int_mult.h ****/#define _BIG_INT_MULT_H#include<iostream>#include<string.h>using namespace std;void reverse(char chr[],int l){//颠倒数组    int i;    char temp;    for(i=0;i <= l/2;i++){//首尾交换        temp=chr[i];        chr[i]=chr[l-i];        chr[l-i]=temp;    }}int multiple(char a[],char b[],int result[]){//函数返回值是乘积的长度    int la,lb,lresult;//a,b及result的位数-1    int i,j;//循环控制变量    int temp;    la=strlen(a)-1;//初始化最后一位lasta,lastb    lb=strlen(b)-1;    reverse(a,la);//将a,b颠倒,下面从个位数开始算起    reverse(b,lb);    for(i=0;i <= la;i++)                   for(j=0;j <= lb;j++){                            //精华所在,+=用于处理进位                            result[i+j]+=(a[i]-48)*(b[j]-48);//-48是减去字符'0'的ASCII值                            result[i+j+1]+=result[i+j]/10;//进位                            result[i+j]%=10;//自己留的数                   }    lresult=i+j+1;//结果长度最多为i+j+1    while(result[lresult] == 0) lresult--;//没有达到长度最多的情况,逆序,高位在后    if(lresult < 0 ){result[0]=0;lresult=0;}//如果是0    for(i=0;i <= lresult/2;i++){ //返回正序的结果        temp=result[i];        result[i]=result[lresult-i];        result[lresult-i]=temp;    }    return lresult+1;}#undef _BIG_INT_MULT_H

   

/*****  big_int_mult.cpp  *****/#include"big_int_mult.h"int main(){    int len,i;    int result[20]= {0};    char str1[10]="12";    char str2[10]="12";    cout<<"multiple(str1,str2,result)\n"<<str1<<"  "<<str2<<"  ";        len=multiple(str1,str2,result);    cout<<len<<endl;    for (i=0; i<20; i++)        cout<<result[i];}


原创粉丝点击