大数相乘

来源:互联网 发布:先序遍历的递归算法 编辑:程序博客网 时间:2024/05/21 10:49

按照正常的计算规则,先用一个数组保存每两位相乘的结果,这里先不进位!等到两个数的所有的位数都计算完毕的时候,在遍历一遍结果数组,使得低位向高位进位!最后将结果进行翻转!

/*使用数组解决大数相乘的问题*/#include <iostream>#include <string.h>#include <stdlib.h>#include <stdio.h>#define MAX 1000using namespace std;char * multyplus(char *s1,char *s2,int l1,int l2){               int k;               int i,j;               int array[MAX];               char *result = new char[MAX];//在调用函数中,使用new分配的内存,它的生存周期为整个函数,而不是局部的函数!               memset(array,-1,sizeof(array));               for(i=0;i<l1;i++)               {                         k=i;                         for(j=0;j<l2;j++)                         {                                 if(array[k]==-1)                                    array[k++]=(s1[i]-48)*(s2[j]-48);//需要注意的是,字符和数字的区别                                 else                                 array[k++]+=(s1[i]-48)*(s2[j]-48);                         }               }               //处理进位               for(k=0;;k++)               {                       array[k+1]+=array[k]/10;                       array[k]=array[k]%10;                       if(array[k+1]==-1)                        break;               }               //进行转换               for(i=k,j=0;i>=0;i--,j++)               {                       result[j]=array[i]+48;               }               result[j]='\0';               return result;}int main(){    char s1[20],s2[20],*res;    char temp;    cout << "~~~~~请输入两个数,中间以空格隔开~~~~~" <<endl;    scanf("%s",s1);    scanf("%s",s2);        //字符串翻转,使得以0开始的为最低位        int l1=strlen(s1);        int l2=strlen(s2);        for(int i=0;i<l1/2;i++)        {                 temp=s1[i];                 s1[i]=s1[l1-1-i];                 s1[l1-1-i]=temp;        }        for(int i=0;i<l2/2;i++)        {                 temp=s2[i];                 s2[i]=s2[l2-1-i];                 s2[l2-1-i]=temp;        }        cout<<s1<<' '<<s2<<endl;    if(l1>l2)    res=multyplus(s1,s2,l1,l2);    else    res=multyplus(s2,s1,l2,l1);    cout<<"使用大数运算进行运算得到的结果:";    cout<<res<<endl;    cout<<endl<<endl;    cout<<"用计算机直接运算的结果:";    int num1=atoi(s1);    int num2=atoi(s2);    cout<<num1*num2<<endl;    return 0;}


0 0
原创粉丝点击