两个大数相乘

    技术2022-05-11  67

    /****************************************//*程序 Big Number Multi*//*作者: zzh *//*日期:2007-09-29*//*调试:VC6*//****************************************/

    #include<iostream>using namespace std;#define MAX 1000int result[MAX]={0};char a[MAX/2];char b[MAX/2];// s1[lens1]='/0';// s2[lens2]='/0';template<typename Type>void Display(Type s[]){ cout<<s<<endl;}//将字符数组逆序void Reverse(char s[],int length){ char mid[MAX]; for(int i=0;i<length;i++) {  mid[length-i-1]=s[i]; } mid[length]='/0'; strcpy(s,mid);}//将result数组调整,因为相乘时没有进位,比如result[i]=35void Schule(int length){ int i=0; for(i=0;i<length;i++) {  if(result[i]>=10)  {   int temp;   temp=result[i];   result[i]=temp;   result[i+1]+=temp/10;  } }}/*相乘,基本思想是:将两个大数存储在字符数组中,        乘数的一位分别乘于被乘数的每一位,将结果保存到result数组中  同时注意对应位的加和进位*/int Multi(char s1[],char s2[],int lens1,int lens2){ int i,j; //char mid[MAX]; for(i=0;i<=lens1-1;i++) {  int temp01,temp02,temp03;  temp01=s1[i]-'0';  for(j=0;j<=lens2-1;j++)  {   temp02=s2[j]-'0';   temp03=temp01*temp02;            result[i+j]+=temp03;   result[i+j+1]+=temp03/10;  } } return 0;}void main(){ while(true) {  int lens1,lens2,i;  cin>>a;  lens1=strlen(a);  cin>>b;  lens2=strlen(b);  a[lens1]='/0';  b[lens2]='/0';  Display(a);  cout<<endl;  Display(b);  cout<<endl;  Reverse(a,lens1);  Display(a);  Reverse(b,lens2);  Display(b);  Multi(a,b,lens1,lens2);  Schule(lens1+lens2+1);  if(result[lens1+lens2-1]!=0)cout<<result[lens1+lens2-1];  for(i=lens1+lens2-2;i>=0;i--)  {   cout<<result[i];  }  cout<<endl;  for(i=0;i<=lens1+lens2+1;i++)   result[i]=0; }} 

    空虚的时候写的,代码很多地方没有优化,可以根据自己的需要做相应的修改!


    最新回复(0)