用c语言编写程序,求大数加,大数减,大数积,大数除。写四个程序。
第一行输入一个大数,第二行数入一个大数。注意正负哦现在乘除我搞定了,就是加和减不会,主要是正负的问题。感觉很难,谁会啊?给你加分...
第一行输入一个大数,第二行数入一个大数。注意正负哦
现在乘除我搞定了,就是加和减不会,主要是正负的问题。感觉很难,谁会啊?给你加分 展开
现在乘除我搞定了,就是加和减不会,主要是正负的问题。感觉很难,谁会啊?给你加分 展开
2个回答
展开全部
既然你乘除都会了,加减就更应该没问题阿。。。
#include<iostream>
using namespace std;
int a[101]={0},b[101]={0};
void init(int a[])
{ int i;
string s;
cin>>s;
a[0]=s.length();
for(i=1;i<=a[0];i++)
a[i]=s[a[0]-i]-'0';
}
void print(int a[])
{
int i;
if (a[0]==0){cout<<0<<endl;return;}
for(i=a[0];i>0;i--) cout<<a[i];
cout<<endl;
return ;
}
/*
void jian(int a[],int b[])//计算a=a-b
{ int flag,i;
flag=compare(a,b); //调用比较函数判断大小
if (flag==0) {a[0]=0;return;} //相等
if(flag==1) //大于
{for(i=1;i<=a[0];i++)
{if(a[i]<b[i]){ a[i+1]--;a[i]+=10;} //若不够减则向上借一位
a[i]=a[i]-b[i];
}
while(a[a[0]]==0) a[0]--; //修正a的位数
return;
}
if (flag==-1)//小于 则用a=b-a,返回-1
{ cout<<"-";
for(i=1;i<=b[0];i++)
{if(b[i]<a[i]){b[i+1]--;b[i]+=10;} //若不够减则向上借一位
a[i]=b[i]-a[i];
}
a[0]=b[0];
while(a[a[0]]==0) a[0]--; //修正a的位数
return;
}
}
*/
void jia(int a[],int b[])
{ int i,k;
if(a[0]<b[0])a[0]=b[0];
for(i=1;i<=a[0];i++) a[i]+=b[i];
for(i=1;i<=a[0];i++)
{ a[i+1]+=a[i]/10;
a[i]%=10;
}
if(a[a[0]+1]>0) a[0]++;
}
int main()
{
init(a);init(b);
jia(a,b);
print(a);
return 0;
}
展开全部
你说的大数,是指数很大?还是什么,如果数太大,计算机也不能储存了。
C语言double类型的有效位数一般为16位。如果可以存放你所说的大数,那么程序可以实现。如下:
#include<stdio.h>
int main()
{
double a,b;
scanf("%lf",&a);
scanf("%lf",&b);
printf("%g\n",a+b);
return 0;
}
其余三个程序,基本与上面相同,只需要将程序倒数第二行printf("%g\n",a+b);中的“a+b”改为“a-b”,“a*b”,“a/b”就行了!
C语言double类型的有效位数一般为16位。如果可以存放你所说的大数,那么程序可以实现。如下:
#include<stdio.h>
int main()
{
double a,b;
scanf("%lf",&a);
scanf("%lf",&b);
printf("%g\n",a+b);
return 0;
}
其余三个程序,基本与上面相同,只需要将程序倒数第二行printf("%g\n",a+b);中的“a+b”改为“a-b”,“a*b”,“a/b”就行了!
追问
将近100位
追答
那没办法 计算机也无法精确储存100位的数字,不过可以用一些算法来储存,比如把一个数分为n个数相乘,用n个储存单元来储存着n个数就行了,但是具体怎么分就要看自己用的什么算法了。这里提供一个思路,可以去研究下,当然还有其他算法,比如可以直接把100为分成10个10位数的组合等等。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询