求:实现任意长度的两个整数乘法的C++算法.。
展开全部
//自己修改吧
//C++大数算法
//2009-11-16 22:19
#include "iostream.h"
#include "string.h"
#include "stdlib.h"
int g; //g是接收功能选择的变量
// 加法函数
void out()
{
cout<<" 程序功能:可以完成任意大数的加法,减法和比较大小"<<endl;
cout<<" 乘法,除法和求余只能完成一定范围内数的运算"<<endl<<endl<<endl;
}
void add(char a[],char b[],int x,int y,int f,int d)
{
char c[102];
int i;
int j;
int jin=0;
int s=0;
int m,ma;
int xx,yy;
if(d==0)
{
xx=0;yy=0;
}
if(d==1)
{
xx=1;yy=0;
}
if(d==2)
{
xx=0;yy=1;
}
if(d==3)
{
xx=1;yy=1;
}
x>y?m=x:m=y;
ma=m;
i=x-1;
j=y-1;
for(;m>0;i--,j--,m--)
{
if(j<yy && i>=xx)
s=int(a[i])-48+jin; //将字符转换成整型
else if(i<xx && j>=yy)
s=int(b[j])-48+jin;
else if(i>=xx && j>=yy)
s=(int(a[i])-48+int(b[j])-48+jin);
if(s>9)
{
jin=1;
c[m]=char(s+38);
}
else
{
jin=0;
c[m]=char(s+48);
}
}
if(jin==1)
c[0]='1';
else
c[0]=' ';
if(g==1)
{
cout<<"两数相加的结果为:";
if(f==0)
for(i=0;i<ma+1;i++)
cout<<c[i];
else
{
cout<<'-';
for(i=0;i<ma+1;i++)
cout<<c[i];
}
}
if(g==2)
{
cout<<"两数相减的结果为:";
if(f==0)
for(i=0;i<ma+1;i++)
cout<<c[i];
else
{
cout<<'-';
for(i=0;i<ma+1;i++)
cout<<c[i];
}
}
cout<<endl;
}
// 减函数
void jian(char a[],char b[],int x,int y,int f,int d)
{
char c[102];
int i;
int j;
int jin=0;
int s=0;
int m,ma;
int xx,yy;
if(d==0)
{
xx=0;yy=0;
}
if(d==1)
{
xx=1;yy=0;
}
if(d==2)
{
xx=0;yy=1;
}
if(d==3)
{
xx=1;yy=1;
}
m=x-1;
ma=m;
i=x-1;
j=y-1;
for(;m>=0;i--,j--,m--)
{
if(j<yy&&i>=xx)
s=int(a[i])-48-jin;
else if(i>=xx&&j>=yy)
s=(int(a[i])-48)-(int(b[j])-48)-jin;
if(s<0)
{
jin=1;
c[m]=char(s+58);
}
else
{
jin=0;
c[m]=char(s+48);
}
}
if(g==1)
{
cout<<"两数相加的结果为:";
if(f==0)
for(i=0;i<ma+1;i++)
cout<<c[i];
else
{
cout<<'-';
for(i=0;i<ma+1;i++)
cout<<c[i];
}
}
if(g==2)
{
cout<<"两数相减的结果为:";
if(f==0)
for(i=0;i<ma+1;i++)
cout<<c[i];
else
{
cout<<'-';
for(i=0;i<ma+1;i++)
cout<<c[i];
}
}
cout<<endl;
}
// 比较大小函数
void bijiao(char a[],char b[],int x,int y)
{
int len=0;
if(a[0]=='-' && b[0]=='-' || a[0]!='-' && b[0]!='-')
{
if(x>y)
{
if(a[0]=='-')
cout<<"数一小于数二"<<endl;
else
cout<<"数一大于数二"<<endl;
}
else if(x==y)
{
for(int i=0;i<x;i++)
{
if(a[0]=='-')
{
if(a[i]<b[i])
{
cout<<"数一大于数二"<<endl;
break;
}
else if(a[i]>b[i])
{
cout<<"数一小于数二"<<endl;
break;
}
else len++;
}
else
{
if(a[i]<b[i])
{
cout<<"数一小于数二"<<endl;
break;
}
else if(a[i]>b[i])
{
cout<<"数一大于数二"<<endl;
break;
}
else len++;
}
}
if(len==x)
cout<<"两数相等!"<<endl;
}
else if(x<y)
{
if(a[0]!='-')
cout<<"数一小于数二"<<endl;
else
cout<<"数一大于数二"<<endl;
}
}
if(a[0]=='-' && b[0]!='-')
cout<<"6数一小于数二!"<<endl;
if(a[0]!='-' && b[0]=='-')
cout<<"数一大于数二!"<<endl;
}
// 乘法函数
void chen(char a[],char b[])
{
cout<<"两数想乘的结果为:";
cout<<double(atof(a))*double(atof(b))<<endl;
}
void chu(char a[],char b[])
{
cout<<"两数想除的结果为:";
cout<<double(atof(a))/double(atof(b))<<endl;
}
void yu(char a[],char b[])
{
cout<<"数一除数二的余数为:";
cout<<atoi(a)%atoi(b)<<endl;
}
// 主函数
void main()
{
char a[100];
char b[100];
char yn;
int f,d;
int x,y;
out();
cout<<" 输入第一个大数:";
cin>>a;
cout<<" 输入第二个大数:";
cin>>b;
while(1)
{ cout<<"(1:加法 2:减法 3:比较 4:乘法 5:除法 6:求余)请选择:";
cin>>g;
x=strlen(a);
y=strlen(b);
if(a[0]=='-' && b[0]=='-' && g==1)
{
f=1;
d=3;
add(a,b,x,y,f,d);
}
if(a[0]!='-' && b[0]!='-' && g==1)
{
f=0;
d=0;
add(a,b,x,y,f,d);
}
if(a[0]=='-' && b[0]!='-' && g==1)
{
if(x-1>y)
{
f=1;
d=1;
jian(a,b,x,y,f,d);
}
if(x-1==y)
{
for(int i=0;i<x-2;i++)
{
if(a[i+1]>b[i])
{
f=1;
d=1;
jian(a,b,x,y,f,d);
break;
}
if(a[i+1]<b[i])
{
f=0;
d=2;
jian(b,a,y,x,f,d);
break;
}
}
}
if(x-1<y)
{
f=0;
d=2;
jian(b,a,y,x,f,d);
}
}
if(a[0]!='-' && b[0]=='-' && g==1)
{
if(x>y-1)
{
f=0;
d=2;
jian(a,b,x,y,f,d);
}
if(x==y-1)
{
for(int i=0;i<x;i++)
{
if(a[i]>b[i+1])
{
f=0;
d=2;
jian(a,b,x,y,f,d);
break;
}
if(a[i]<b[i+1])
{
f=1;
d=1;
jian(b,a,y,x,f,d);
break;
}
}
}
if(x<y-1)
{
f=1;
d=1;
jian(b,a,y,x,f,d);
}
}
if(a[0]=='-' && b[0]=='-' && g==2)
{
if(x>y)
{
f=1;
d=1;
jian(a,b,x,y,f,d);
}
if(x==y)
{
for(int i=1;i<x;i++)
{
if(a[i]>b[i])
{
f=1;
d=1;
jian(a,b,x,y,f,d);
break;
}
if(a[i]<b[i])
{
f=0;
d=2;
jian(b,a,y,x,f,d);
break;
}
}
}
if(x<y)
{
f=0;
d=2;
jian(b,a,y,x,f,d);
}
}
if(a[0]!='-' && b[0]!='-' && g==2)
{
if(x>y)
{
f=0;
d=0;
jian(a,b,x,y,f,d);
}
if(x==y)
{
for(int i=0;i<x;i++)
{
if(a[i]>b[i])
{
f=0;
d=0;
jian(a,b,x,y,f,d);
break;
}
if(a[i]<b[i])
{
f=1;
d=0;
jian(b,a,y,x,f,d);
break;
}
}
}
if(x<y)
{
f=1;
d=0;
jian(b,a,y,x,f,d);
}
}
if(a[0]!='-' && b[0]=='-' && g==2)
{
f=0;
d=2;
add(a,b,x,y,f,d);
}
if(a[0]=='-' && b[0]!='-' && g==2)
{
f=1;
d=1;
add(a,b,x,y,f,d);
}
if(g==3)
{
bijiao(a,b,x,y);
}
if(g==4)
chen(a,b);
if(g==5)
chu(a,b);
if(g==6)
yu(a,b);
cout<<"是否运行其它算法?(Y/N)";
cin>>yn;
if(yn!='Y' && yn!='y')
break;
}
}
//C++大数算法
//2009-11-16 22:19
#include "iostream.h"
#include "string.h"
#include "stdlib.h"
int g; //g是接收功能选择的变量
// 加法函数
void out()
{
cout<<" 程序功能:可以完成任意大数的加法,减法和比较大小"<<endl;
cout<<" 乘法,除法和求余只能完成一定范围内数的运算"<<endl<<endl<<endl;
}
void add(char a[],char b[],int x,int y,int f,int d)
{
char c[102];
int i;
int j;
int jin=0;
int s=0;
int m,ma;
int xx,yy;
if(d==0)
{
xx=0;yy=0;
}
if(d==1)
{
xx=1;yy=0;
}
if(d==2)
{
xx=0;yy=1;
}
if(d==3)
{
xx=1;yy=1;
}
x>y?m=x:m=y;
ma=m;
i=x-1;
j=y-1;
for(;m>0;i--,j--,m--)
{
if(j<yy && i>=xx)
s=int(a[i])-48+jin; //将字符转换成整型
else if(i<xx && j>=yy)
s=int(b[j])-48+jin;
else if(i>=xx && j>=yy)
s=(int(a[i])-48+int(b[j])-48+jin);
if(s>9)
{
jin=1;
c[m]=char(s+38);
}
else
{
jin=0;
c[m]=char(s+48);
}
}
if(jin==1)
c[0]='1';
else
c[0]=' ';
if(g==1)
{
cout<<"两数相加的结果为:";
if(f==0)
for(i=0;i<ma+1;i++)
cout<<c[i];
else
{
cout<<'-';
for(i=0;i<ma+1;i++)
cout<<c[i];
}
}
if(g==2)
{
cout<<"两数相减的结果为:";
if(f==0)
for(i=0;i<ma+1;i++)
cout<<c[i];
else
{
cout<<'-';
for(i=0;i<ma+1;i++)
cout<<c[i];
}
}
cout<<endl;
}
// 减函数
void jian(char a[],char b[],int x,int y,int f,int d)
{
char c[102];
int i;
int j;
int jin=0;
int s=0;
int m,ma;
int xx,yy;
if(d==0)
{
xx=0;yy=0;
}
if(d==1)
{
xx=1;yy=0;
}
if(d==2)
{
xx=0;yy=1;
}
if(d==3)
{
xx=1;yy=1;
}
m=x-1;
ma=m;
i=x-1;
j=y-1;
for(;m>=0;i--,j--,m--)
{
if(j<yy&&i>=xx)
s=int(a[i])-48-jin;
else if(i>=xx&&j>=yy)
s=(int(a[i])-48)-(int(b[j])-48)-jin;
if(s<0)
{
jin=1;
c[m]=char(s+58);
}
else
{
jin=0;
c[m]=char(s+48);
}
}
if(g==1)
{
cout<<"两数相加的结果为:";
if(f==0)
for(i=0;i<ma+1;i++)
cout<<c[i];
else
{
cout<<'-';
for(i=0;i<ma+1;i++)
cout<<c[i];
}
}
if(g==2)
{
cout<<"两数相减的结果为:";
if(f==0)
for(i=0;i<ma+1;i++)
cout<<c[i];
else
{
cout<<'-';
for(i=0;i<ma+1;i++)
cout<<c[i];
}
}
cout<<endl;
}
// 比较大小函数
void bijiao(char a[],char b[],int x,int y)
{
int len=0;
if(a[0]=='-' && b[0]=='-' || a[0]!='-' && b[0]!='-')
{
if(x>y)
{
if(a[0]=='-')
cout<<"数一小于数二"<<endl;
else
cout<<"数一大于数二"<<endl;
}
else if(x==y)
{
for(int i=0;i<x;i++)
{
if(a[0]=='-')
{
if(a[i]<b[i])
{
cout<<"数一大于数二"<<endl;
break;
}
else if(a[i]>b[i])
{
cout<<"数一小于数二"<<endl;
break;
}
else len++;
}
else
{
if(a[i]<b[i])
{
cout<<"数一小于数二"<<endl;
break;
}
else if(a[i]>b[i])
{
cout<<"数一大于数二"<<endl;
break;
}
else len++;
}
}
if(len==x)
cout<<"两数相等!"<<endl;
}
else if(x<y)
{
if(a[0]!='-')
cout<<"数一小于数二"<<endl;
else
cout<<"数一大于数二"<<endl;
}
}
if(a[0]=='-' && b[0]!='-')
cout<<"6数一小于数二!"<<endl;
if(a[0]!='-' && b[0]=='-')
cout<<"数一大于数二!"<<endl;
}
// 乘法函数
void chen(char a[],char b[])
{
cout<<"两数想乘的结果为:";
cout<<double(atof(a))*double(atof(b))<<endl;
}
void chu(char a[],char b[])
{
cout<<"两数想除的结果为:";
cout<<double(atof(a))/double(atof(b))<<endl;
}
void yu(char a[],char b[])
{
cout<<"数一除数二的余数为:";
cout<<atoi(a)%atoi(b)<<endl;
}
// 主函数
void main()
{
char a[100];
char b[100];
char yn;
int f,d;
int x,y;
out();
cout<<" 输入第一个大数:";
cin>>a;
cout<<" 输入第二个大数:";
cin>>b;
while(1)
{ cout<<"(1:加法 2:减法 3:比较 4:乘法 5:除法 6:求余)请选择:";
cin>>g;
x=strlen(a);
y=strlen(b);
if(a[0]=='-' && b[0]=='-' && g==1)
{
f=1;
d=3;
add(a,b,x,y,f,d);
}
if(a[0]!='-' && b[0]!='-' && g==1)
{
f=0;
d=0;
add(a,b,x,y,f,d);
}
if(a[0]=='-' && b[0]!='-' && g==1)
{
if(x-1>y)
{
f=1;
d=1;
jian(a,b,x,y,f,d);
}
if(x-1==y)
{
for(int i=0;i<x-2;i++)
{
if(a[i+1]>b[i])
{
f=1;
d=1;
jian(a,b,x,y,f,d);
break;
}
if(a[i+1]<b[i])
{
f=0;
d=2;
jian(b,a,y,x,f,d);
break;
}
}
}
if(x-1<y)
{
f=0;
d=2;
jian(b,a,y,x,f,d);
}
}
if(a[0]!='-' && b[0]=='-' && g==1)
{
if(x>y-1)
{
f=0;
d=2;
jian(a,b,x,y,f,d);
}
if(x==y-1)
{
for(int i=0;i<x;i++)
{
if(a[i]>b[i+1])
{
f=0;
d=2;
jian(a,b,x,y,f,d);
break;
}
if(a[i]<b[i+1])
{
f=1;
d=1;
jian(b,a,y,x,f,d);
break;
}
}
}
if(x<y-1)
{
f=1;
d=1;
jian(b,a,y,x,f,d);
}
}
if(a[0]=='-' && b[0]=='-' && g==2)
{
if(x>y)
{
f=1;
d=1;
jian(a,b,x,y,f,d);
}
if(x==y)
{
for(int i=1;i<x;i++)
{
if(a[i]>b[i])
{
f=1;
d=1;
jian(a,b,x,y,f,d);
break;
}
if(a[i]<b[i])
{
f=0;
d=2;
jian(b,a,y,x,f,d);
break;
}
}
}
if(x<y)
{
f=0;
d=2;
jian(b,a,y,x,f,d);
}
}
if(a[0]!='-' && b[0]!='-' && g==2)
{
if(x>y)
{
f=0;
d=0;
jian(a,b,x,y,f,d);
}
if(x==y)
{
for(int i=0;i<x;i++)
{
if(a[i]>b[i])
{
f=0;
d=0;
jian(a,b,x,y,f,d);
break;
}
if(a[i]<b[i])
{
f=1;
d=0;
jian(b,a,y,x,f,d);
break;
}
}
}
if(x<y)
{
f=1;
d=0;
jian(b,a,y,x,f,d);
}
}
if(a[0]!='-' && b[0]=='-' && g==2)
{
f=0;
d=2;
add(a,b,x,y,f,d);
}
if(a[0]=='-' && b[0]!='-' && g==2)
{
f=1;
d=1;
add(a,b,x,y,f,d);
}
if(g==3)
{
bijiao(a,b,x,y);
}
if(g==4)
chen(a,b);
if(g==5)
chu(a,b);
if(g==6)
yu(a,b);
cout<<"是否运行其它算法?(Y/N)";
cin>>yn;
if(yn!='Y' && yn!='y')
break;
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询