⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.txt

📁 自己做的一个大整数相乘小算法...有很多不足之处请大家指教
💻 TXT
字号:
include<iostream.h>
#include<iomanip.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
//*******************************************************************
#define N 1000

int size1(int m,int n)//计算数组x[]乘以数组y[]的最大位数
{
	int sum=0;
         sum=m+n;
	return sum;
}
//********************************************************************
char *init(int size)//分配最后乘机结果的空间
{
	char *p=new char[size];
	int i;
	if(!p)
	  {  
		  cout<<size;
		    exit(1);
	  }
	  p[0]=1;
	  for(i=1;i<size;i++)
		  p[i]=0;

	  return p;
}
//**********************************************************************
void change(char x[],int m,char y[],int n,int size,char *result)     
{
	char a[N],b[N];
	char c[N][N];
	int i,j,k;
	int and1=0;

	    for(i=0;i<m;i++)                   ///
	        	a[i]=x[m-i-1];
        for(i=0;i<n;i++)
	        	b[i]=y[n-i-1];

		cout<<"输入大整数x[]倒置为:";
         for(i=0;i<m;i++)
			 cout<<a[i];
	          cout<<endl;
	     cout<<"输入大整数y[]倒置为:";
         for(i=0;i<n;i++)
			 cout<<b[i];
	          cout<<endl;                  ///*将数组x[]与y[]倒过来存贮*/

	for(i=0;i<n;i++)                         //分别求解每一位的乘积
	{
		int and=0;
		for(j=0;j<=m;j++)
		{
          if(j==m)
			{
              if(and!=0)
			     c[i][m]=char(and+48);
		       else c[i][m]=char(48);
			   break;
			}
	      
			and+=((int)a[j]-48)*((int)b[i]-48);
			c[i][j]=char((and%10)+48);
			and/=10;
		}
	}
       
	
	   for(i=0;i<n;i++)
	   {
		   for(j=0;j<=m;j++)
			   cout<<c[i][j];
		        cout<<"\n";
	   }                                    //输出每一位的乘机

     for(i=0;i<n;i++)   //将c[][]进行移位
	 {
		 for(k=0;k<=m;k++)
			 c[i][m+i-k]=c[i][m-k];
        for(j=0;j<i;j++)
		   c[i][j]=char(48);
		for(j=m+i+1;j<=size;j++)
			c[i][j]=char(48);
	 }
	 //for(i=0;i<n;i++) //将c[][]进行加'0'处理

       for(i=0;i<n;i++)
	   {
		   for(j=0;j<size;j++)
			   cout<<c[i][j];
		        cout<<"\n";
	   }      
	   for(i=0;i<size;i++)
	   {
		   for(j=0;j<n;j++)
			   and1+=int(c[j][i])-48;
			     result[i]=char(and1%10+48);
				 and1/=10;
	   }
}
//*********************************************************************8
void display(char *a,int size)//输出数据
{
	 int i,bit=0;

	 cout<<"***********************\n"<<"相乘的结果是:";
	 if(int(a[size-1])-48==0)
	 {
        for(i=size-2;i>=0;i--)
		{
		 if(bit%50==0)
       cout<<endl<<"第"<<(bit/50+1)<<"个50位:";
		 cout<<a[i];
		 bit++;
		}
	 }
	 else{
		 for(i=size-1;i>=0;i--)
		 {
		    if(bit%50==0)
           cout<<endl<<"第"<<(bit/50+1)<<"个50位:";
		      cout<<a[i];
		 bit++;
		 }
	 }
	 cout<<"\n*************************\n"<<endl;
}
//**************************************************************************
void main()
{
  char x[N],y[N];
  char ch1,ch2;
  int  i=0,j=0;
  int  m=0,n=0;
  int  size;
  
      cout<<"输入大整数x[]:"<<endl;
       while((ch1=cin.get())!='\n')
	   {  m++;   
	      x[i]=ch1; i++; 
	   }
	   
	  cout<<"输入大整数y[]:"<<endl;
	    while((ch2=cin.get())!='\n')
		{   n++;  
			 y[j]=ch2;j++;
		}

		cout<<endl;
		cout<<"x[]的位数为"<<m<<"  ;   y[]的位数为"<<n<<endl;

		cout<<"输入大整数x[]为:";
         for(i=0;i<m;i++)
			 cout<<x[i];
	          cout<<endl;
        cout<<"输入大整数y[]为:";
         for(j=0;j<n;j++)
			 cout<<y[j];
            cout<<endl;
			cout<<"*******************"<<endl;


         size=size1(m,n);
        char *p=init(size);
		change(x,m,y,n,size,p);/*将数组x[]与y[]倒过来存贮*/
        display(p,size);
          delete []p;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -