初来乍到

第一次写博客,也不懂写什么好,想起前几天有个朋友说他不懂怎么弄大数相减的事。那我就资源重复利用了。在下面贴上我自己写的大数相减,大牛们请键下留情,勿喷啊。

#include<stdio.h>
#include<stdlib.h>
int main()
{
char temp[100];
int a[100]={
0
};
int b[100]={
0
};
int a1[100]={
0
};
int b1[100]={
0
};
int c[100];
int i,na,nb,n,j,k;
printf("输入a\n");
gets(temp);
for(i=0;temp[i];i++)a[i]=temp[i]-'0';
printf("输入b\n");
gets(temp);
for(i=0;temp[i];i++)b[i]=temp[i]-'0';
for(na=0;a[na];na++);
for(nb=0;b[nb];nb++);
n=na>nb?na:nb;//获取长度
printf("\n");
if(na<nb)//重置较长的为a数组
{
for(i=0;i<n;i++)
{
c[i]=a[i];
a[i]=b[i];
b[i]=c[i];
}
}
for(i=99;i>=0;i--)if(a[i])break;//找到不为零的
for(j=0,k=i;j<=i;)a1[j++]=a[k--];//倒置
for(i=99;i>=0;i--)if(b[i])break;
for(j=0,k=i;j<=i;)b1[j++]=b[k--];

for(i=0;i<n;i++)//相减
{
a1[i]-=b1[i];
}

for(i=0;i<n;i++)//处理进位
{
if(a1[i]<0){
a1[i]+=10;
a1[i+1]-=1;
}
}

for(i=99;i>=0;i--)if(a1[i])break;//输出
for(;i>=0;i--)printf("%d",a1[i]);
return 0;
}

上面的代码就是这样了,有什么问题的话留言吧。

原文地址:https://www.cnblogs.com/eeason/p/3106812.html