大整数一般指超过十位的十进制整数,这里假定不超过五十位。这类大整
答案:1 悬赏:60 手机版
解决时间 2021-01-25 05:39
- 提问者网友:浮克旳回音
- 2021-01-24 05:29
大整数一般指超过十位的十进制整数,这里假定不超过五十位。这类大整
最佳答案
- 五星知识达人网友:人间朝暮
- 2021-01-24 06:25
define MAX 1000
#include
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("请输入第一个数
");
for(i=0;; i++)
{
nNuma++;
scanf("%c",&c1);
a1[i]=c1;
if(c1=='
')
{
nNuma--;
break;
}
}
printf("请输入第二个数
");
for(i=0;; i++)
{
nNumb++;
scanf("%c",&c2);
b1[i]=c2;
if(c2=='
')
{
nNumb--;
break;
}
}
for(i=0; i {
a[i]=a1[i]-'0';
}
for(i=0; i {
b[i]=b1[i]-'0';
}
add(a,b,nNuma,nNumb);
if(compare(a,b,nNuma,nNumb))
printf("a>=b
");
else
printf("a ");
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] {
ma[na-2]--;
h=10;
}
else
h=0;
c[k]=ma[na-1]-mb[nb-1]+h; //h为借位
k++;
}
if(ma[na-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("
");
}
//大数加法
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("
");
}
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] else sign=true;
}
else if(nana
sign=false;
return sign;
}
#include
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("请输入第一个数
");
for(i=0;; i++)
{
nNuma++;
scanf("%c",&c1);
a1[i]=c1;
if(c1=='
')
{
nNuma--;
break;
}
}
printf("请输入第二个数
");
for(i=0;; i++)
{
nNumb++;
scanf("%c",&c2);
b1[i]=c2;
if(c2=='
')
{
nNumb--;
break;
}
}
for(i=0; i
a[i]=a1[i]-'0';
}
for(i=0; i
b[i]=b1[i]-'0';
}
add(a,b,nNuma,nNumb);
if(compare(a,b,nNuma,nNumb))
printf("a>=b
");
else
printf("a ");
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]
ma[na-2]--;
h=10;
}
else
h=0;
c[k]=ma[na-1]-mb[nb-1]+h; //h为借位
k++;
}
if(ma[na-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("
");
}
//大数加法
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("
");
}
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] else sign=true;
}
else if(na
sign=false;
return sign;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯