📄 1.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 + -