高精度减法:
第一步:判断正负,如果s1比s2对应的整数小,结果为负,交换s1
第二步:将两个字符串,逆序存入2个整数输出测试
第三步:从左至右,逐位相减,不够借位
第四步:从右向左,逆序输出
天天提示文章质量不佳怎么办?当然是水字数啦,烦死了这个csdn
上代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
enum
{
LENGTH = 1000+1,
};
void nx(char [],int [],int );
int main(void)
{
//初始化为正
char fuhao = '+';
//定义两个字符串,用来存入大数
char zf1[LENGTH];
char zf2[LENGTH];
gets(zf1);
gets(zf2);
//求出两个的长度
int len1 = strlen(zf1);
int len2 = strlen(zf2);
//比较数据的大小,把大的数据存入zf1,方便计算
if(len1<len2 || ((len1==len2)&&(strcmp(zf1,zf2)<0)))
{
//交换
char temp[LENGTH];
strcpy(temp,zf1);
strcpy(zf1,zf2);
strcpy(zf2,temp);
//说明上面小,要变成负号
fuhao = '-';
//长度也要交换
int tmp =len1;
len1 = len2;
len2 = tmp;
}
//然后逆序存入整型数组
int num1[LENGTH]={0};
int num2[LENGTH]={0};
//保存结果
int jg[LENGTH] = {0};
//写个逆序函数吧,存到整型数组里
nx(zf1,num1,len1);
nx(zf2,num2,len2);
//找到两个中的最大长度
int maxlen = len1>len2?len1:len2;
int i;
for(i = 0;i < maxlen;i++)
{
if(num1[i]<num2[i])
{
num1[i]+=10;
num1[i+1]-=1;
}
jg[i] = num1[i] - num2[i];
}
//找到第一位不为0的数
int pos = 0;
for(i = maxlen-1;i >=0 ;i--)
{
if(jg[i]!=0)
{
pos = i;
break;
}
}
if(fuhao == '-')
printf("%c",fuhao);
for(i = pos;i >= 0;i--)
{
printf("%d",jg[i]);
}
return 0;
}
void nx(char zf[],int num[],int len)
{
int i;
for(i = 0;i < len;i++)
{
num[i] = zf[len-i-1]-'0';
}
}