专用计算器计算高精度减法计算器
2015-03-15 07:11
239 查看
#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; }
相关文章推荐
- 高精度计算----减法运算
- 高精度计算(四)减法
- 高精度计算----减法运算(浮点型)
- 大数,高精度计算---大数减法
- 大数,高精度计算---大数减法
- 5、大数,高精度计算---大数减法
- 大数,高精度计算---大数减法
- 高精度计算----减法运算
- 高精度计算 大数减法
- 高精度计算----减法运算(续)
- 高精度计算
- g723源码详细分析-8-计算冲激响应与振铃减法
- 高精度减法
- 高精度减法
- ACM/ICPC Java高精度计算 转载自CSDN老船长 http://blog.csdn.net/guo_love_peng/article/details/6634150
- 高精度加法,减法
- 【Vimrc】计算概论·专用版
- 我就给一个PHP逆波兰表达式的算法吧---工资计算专用
- 用QTP实现计算器的多位数计算
- BigInteger与BigDecimal高精度计算