大整数一般指超过十位的十进制整数,这里假定不超过五十位。这类大整 5
大整数一般指超过十位的十进制整数,这里假定不超过五十位。这类大整数在C语言系统中因超界溢出,因而不能直接表达和计算。本题目中建议以字符串形式输入、存放和输出大整数,计算时...
大整数一般指超过十位的十进制整数,这里假定不超过五十位。这类大整数在C语言系统中因超界溢出,因而不能直接表达和计算。
本题目中建议以字符串形式输入、存放和输出大整数,计算时可以将字符串中的每位数字字符转换成相应数值进行运算,结果再转回字符存放和输出。
功能要求:
主函数输入2个大整数,并提供功能菜单供用户选择,用户可以选择调用以下各个运算功能,对这两个大整数进行相应的计算,并输出结果。也可以选择继续或退出程序。系统应提供以下功能:
加法:对主函数输入的大整数进行加法运算,并输出结果;
减法:对主函数输入的大整数进行加法运算,并输出结果;
乘法:对主函数输入的大整数进行乘法运算,并输出结果; 展开
本题目中建议以字符串形式输入、存放和输出大整数,计算时可以将字符串中的每位数字字符转换成相应数值进行运算,结果再转回字符存放和输出。
功能要求:
主函数输入2个大整数,并提供功能菜单供用户选择,用户可以选择调用以下各个运算功能,对这两个大整数进行相应的计算,并输出结果。也可以选择继续或退出程序。系统应提供以下功能:
加法:对主函数输入的大整数进行加法运算,并输出结果;
减法:对主函数输入的大整数进行加法运算,并输出结果;
乘法:对主函数输入的大整数进行乘法运算,并输出结果; 展开
展开全部
define MAX 1000
#include<stdio.h>
void add(int *a,int *b,int nNuma,int nNumb);
void plus(int *a,int *b,int nNuma,int nNumb);
bool compare(int *a,int *b,int nNuma,int nNumb);
int main()
{
int nNuma,nNumb;
nNuma=0;
nNumb=0;
int i;
char c1,c2;
char a1[MAX],b1[MAX];
int a[MAX],b[MAX];
printf("请输入第一个数\n");
for(i=0;; i++)
{
nNuma++;
scanf("%c",&c1);
a1[i]=c1;
if(c1=='\n')
{
nNuma--;
break;
}
}
printf("请输入第二个数\n");
for(i=0;; i++)
{
nNumb++;
scanf("%c",&c2);
b1[i]=c2;
if(c2=='\n')
{
nNumb--;
break;
}
}
for(i=0; i<nNuma; i++)
{
a[i]=a1[i]-'0';
}
for(i=0; i<nNumb; i++)
{
b[i]=b1[i]-'0';
}
add(a,b,nNuma,nNumb);
if(compare(a,b,nNuma,nNumb))
printf("a>=b\n");
else
printf("a<b\n");
plus(a,b,nNuma,nNumb);
return 0;
}
//大数减法
void plus(int *a,int *b,int nNuma,int nNumb)
{
int i,h;
int k=0;
int c[MAX];
//int ma[MAX];
int na,nb;
int *ma;
int *mb;
na=nNuma;
nb=nNumb;
ma=a;
mb=b;
if(!compare(a,b,nNuma,nNumb))
{
ma=b;
mb=a;
na=nNumb;
nb=nNuma;
}
for(; nb-1>=0; na--,nb--)
{
if(ma[na-1]<mb[nb-1])
{
ma[na-2]--;
h=10;
}
else
h=0;
c[k]=ma[na-1]-mb[nb-1]+h; //h为借位
k++;
}
if(ma[na-1]<mb[nb-1])
{
ma[na-2]--;
h=10;
}
else
h=0;
if(na-1>=0)
{
for(i=nb-1; i>=0; k++,i--)
c[k]=ma[i];
}
printf("差为: ");
if(!compare(a,b,nNuma,nNumb));
else
printf("-");
for(int j=k-1; j>=0; j--)
printf("%d",c[j]);
printf("\n");
}
//大数加法
void add(int *a,int *b,int nNuma,int nNumb)
{
int i,h,t;
h=0;
int k=0;
int c[MAX];
int na=nNuma;
int nb=nNumb;
for(; na-1>=0&&nb-1>=0; na--,nb--)
{
t=a[na-1]+b[nb-1]+h;
c[k]=t%10;
h=t/10;
k++;
}
if(t>=10)
h=t/10;
else
h=0;
if(na==nb)
{
c[k]=h;
k++;
}
if(na-1>=0)
{
for(i=na-1; i>=0; k++,i--)
{
c[k]=a[i]+h;
h=0;
}
}
if(nb-1>=0)
{
for(i=nb-1; i>=0; k++,i--)
{
c[k]=b[i]+h;
h=0;
}
}
printf("差为: ");
for(int j=k-1; j>=0; j--)
printf("%d",c[j]);
printf("\n");
}
bool compare(int *a,int *b,int nNuma,int nNumb)
{
int i=0;
bool sign;
int na=nNuma;
int nb=nNumb;
if(na>nb)
sign=true;
else if(na==nb)
{
while(a[i]==b[i])
i++;
if(a[i]<b[i]) sign=false; //a[]小于b[]
else sign=true;
}
else if(na<nb) //nb>na
sign=false;
return sign;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询