当数的范围超出long long int的范围时,如果要进行比较和加减我们就要用到大数
大数的比较和加法
大数的加法
因为大数超出了long long int的范围,我们可以用两个字符数组来存放大数,然后模拟人工运算(从最后一位开始,相加然后进位),下面给出代码
#include
#include
int main()
{
char a[10000],b[10000],q; //用两个字符数组来存放数据
scanf("%s",a); //输入两串数字
scanf("%s",b);
int i,j,n,m;
m=strlen(a);
n=strlen(b);
if(m=0;j--,i--) //要进行加法,先要在短的那串数字前面补0,让两串数据等长
{
a[i]=a[j];
}
for(i=0;i=0;i--) //两个数相加,须让长的数据前多一个0来存放可能的进位
{
b[i]=b[i-1];
}
b[0]='0';
}
else
{
for(i=m+1,j=n;j>=0;j--,i--)
{
b[i]=b[j];
}
for(i=0;i=0;i--)
{
a[i]=a[i-1];
}
a[0]='0';
n=m; //让n=最长的字符串长度
}
q=0; //初始化用来统计进位的变量q
for(i=n;i>=0;i--)
{
m=a[i]+b[i]-'0'-'0'+q; //因为是以字符串形式来存放,减去‘0’后才是要运算的数字
a[i]=m%10+'0';
q=m/10;
}
if(a[0]!='0') //去除可能的前导0
printf("%c",a[0]);
for(i=1;ia,把b复制给a
}
printf("%s",a);
return 0;
}
int bj(char *x,char *y) //如果a>b返回0,否则返回1
{
int a,b,i;
a=strlen(x);
b=strlen(y);
if(a>b)
return 0;
if(a |