您的位置:首页 > 其它

专用计算器计算高精度减法计算器

2015-03-15 07:11 211 查看
#include "stdio.h"
#include "string.h"

/************************************************************************/
/* 高精度减法    (这个函数要a[]>=b[])                                   */
/* a[]被减数数组,位数不限                                              */
/* b[]减数数组,位数不限                                                */
/* back[]结果数组,位数不会大于a[]数组的                                */
/************************************************************************/
void sub(char a[],char b[],char back[])
{
int i,k,l1,l2;
l1=strlen(a);
l2=strlen(b);
back[l1]='\0';
for (i=l2-1,l1--;i>=0;l1--,i--)                //减数的个数小于等于被减数,所以减的次数依减数而定
{
if (a[l1]-b[i]>=0)                         //不需要借位相减
{
back[l1]=a[l1]-b[i]+'0';
}
else                                       //向前一位借1
{
back[l1]=10+a[l1]-b[i]+'0';
if (a[l1-1]!='0')                      //当前一位非0,可以被借时,直接借来
{
a[l1-1]-=1;
}
else                                   //若前一位为0,则无法借到,继续向前一位的前一位借,循环
{
k=l1-1;
while (a[k]=='0')
{
a[k]='9';                      //前一位的0,就变成了10,扣去被后一位借去的,还有9
k--;
}
a[k]-=1;                           //到达可以借的位置
}
}
}
while (l1>=0)                                  //被减数多于减数的位数直接赋给结果数组
{
back[l1]=a[l1];
l1--;
}
while (back[0]=='0')                           //将结果数组往前移,方便以后的操作
{
l1=strlen(a);
for (i=0;i<l1-1;i++)
{
back[i]=back[i+1];
}
back[l1-1]='\0';
}
if (strlen(back)==0)                            //被减数与减数刚好相减为0的情况
{
back[0]='0';
back[1]='\0';
}
}

/************************************************************************/
/* 判断函数(被减数与减数的大小比较)                                   */
/* 可以用strcmp函数比较字符串                                           */
/* 比较完后,若小于减数,则置换带入高精度减法函数,最后加'-'输出        */
/************************************************************************/
bool isBigger(char a[],char b[])
{
int l1,l2;
l1=strlen(a);
l2=strlen(b);
if (l1>l2)
{
return true;
}
else if (l1<l2)
{
return false;
}
else
{
if (strcmp(a,b)>=0)
{
return true;
}
else
{
return false;
}
}
}

/************************************************************************/
/* 主函数调用                                                           */
/************************************************************************/
int main()
{
int n;
char a[1000],b[1000],c[1000];
printf("%s","计算次数: ");
scanf("%d",&n);
while (n--)
{
memset(a,'\0',sizeof(a));
memset(b,'\0',sizeof(b));
memset(c,'\0',sizeof(c));
printf("%s","被减数:  ");
scanf("%s",&a);
printf("%s","减数:    ");
scanf("%s",&b);
if (isBigger(a,b))
{
sub(a,b,c);
printf("%s%s\n\n","结果为:  ",c);
}
else
{
sub(b,a,c);
printf("%s%c%s\n\n","结果为:  ",'-',c);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: