📄 大整数乘法040640319.cpp
字号:
#include<math.h>
#include<stdlib.h>
#include<iostream.h>
int n,x,y;
long rt;
void input()
{
cout<<"两个乘数的位数是n,请输入n的值(为简单起见,设n是2的幂): ";
cin>>n;
cout<<endl<<"请输入两个乘数的值:"<<endl;
cout<<"x=";
cin>>x;
cout<<"y=";
cin>>y;
}
int calculate(int a,int b) //递归方式计算函数
{
int temp1,temp2;
long total;
int x1,x0,y1,y0;
if(n>1) //开始分治
{
temp1=(int)pow(10,n/2);
temp2=(int)pow(10,n);
x1=a/temp1; //x值的前半部分
x0=a-x1*temp1; //x值的后半部分
y1=b/temp1; //y值的前半部分
y0=b-y1*temp1; //y值的后半部分
n=n/2; //经过分治后,整数的位数
total=calculate(x1,y1)*temp2+(calculate(x1+x0,y1+y0)-calculate(x1,y1)-calculate(x0,y0))*temp1+calculate(x0,y0);
} //书中公式uv=wy2~n+((w+x)(y+z)-wy-xz)2~n/2+xz
else
{
return a*b;
cout<<"输入的位数不正确";
}
return total;
}
void print1()
{
cout<<"********************************************************************************"<<endl;
cout<<"题目:大整数乘法!"<<endl;
cout<<"作者:040640319 付斌"<<endl;
cout<<"说明:原题目中要将整数变为2进制数进行计算,先程序将公式转化位十进制计算"<<endl;
cout<<"********************************************************************************"<<endl;
}
void print2()
{
cout<<"乘数x="<<x<<"\t"<<"y="<<y<<endl;
cout<<"结果rt="<<rt<<endl;
}
void main()
{
char c;
do{
print1();
input();
rt=calculate(x,y);
print2();
cout<<"是否继续?(y/n)"<<endl;
cin>>c;
}
while(c=='Y'||c=='y');
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -