C语言实现大数的减法
2017-05-28 17:35
218 查看
关于大数减法其核心就是:减法的算法也是从低位开始减,先要判断减数和被减数那一个位数长,减数位数长是正常减;被减数位数长,则被减数减减数,最后还要加上负号; 两个位数长度相等时,最好比较哪一个数大,否则负号会处理的很繁琐;处理每一项时,要先按对应的位用被减数减去减数,用数组存入,如果差小0,需要向上一位借位,再 把这一位的差加10,以此类推 #include<stdio.h> #include<string.h> #define M 100005 using namespace std; char s1[M],s2[M],s[M]; int a[M],b[M],c[M]; /*较大数减去较小数,即正常减*/ void ss(char s1[],char s2[],int n,int m) { int i,j,a[M],b[M]; for(i=0; i<n; i++) a[i]=s1[n-i-1]-'0'; for(i=0; i<m; i++) b[i]=s2[m-i-1]-'0'; for(i=0; i<n; i++) c[i]=a[i]-b[i]; for(i=0;i<n;i++) if(c[i]<0) { while(c[i]<0) { c[i+1]=c[i+1]-1;//借位(高位减一,低位加十) c[i]+=10; } } } int main() { int n,m,i,j,k,kk; memset(s1,0,sizeof(s1)); memset(s2,0,sizeof(s2)); while(~scanf("%s%s",s1,s2)) { n=strlen(s1); m=strlen(s2); printf("s1=%d s2=%d\n",n,m); if(n>m) ss(s1,s2,n,m); else if(n<m) { printf("-"); ss(s2,s1,m,n); } else { /*当两个数位数相同时,判断两个数的大小 */ k=strcmp(s1,s2); /*strcmp()函数:从第一位开始比较两个字符串大小(不管位数多少) k>0则s1较大,k<0则s2较大,k=0则s1=s2*/ if(k==0) { printf("0\n"); continue; } else if(k>0) ss(s1,s2,n,m); else { printf("-"); ss(s2,s1,m,n); } } if(n>m) kk=n; else kk=m; while(c[kk]==0) kk--;//排除前导0 for(i=kk; i>=0; i--) printf("%d",c[i]); printf("\n"); } return 0; }
相关文章推荐
- C语言实现大数阶乘
- C语言实现两个大数相乘问题
- C语言实现两个大数相乘
- 大数运算-减法(C/C++实现)
- 使用C++类实现大数加法,大数减法,大数乘法
- 用线性链表实现大数相加(c语言)[初学者]
- c语言实现菲波那切数列对大数求余
- 大数减法 C语言
- 大数乘法(C语言实现)
- java实现大数减法算法
- 大数运算之100的阶乘(C语言实现)
- C++实现大数的减法
- C语言:实现大数相除,利用大数相减原理。
- 华为OJ机试题目:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘)
- 单链表实现大数加法、大数减法、大数乘法、大数指数运算
- C语言实现求大数阶乘
- C语言实现大数整数乘法
- C语言实现只用加法和减法实现两个正整数的乘除运算
- 剑指offer编程题Java实现——面试题12相关题大数的加法、减法、乘法问题的实现
- string实现大数减法