高精度减法
Posted zhangqiling
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高精度减法相关的知识,希望对你有一定的参考价值。
1 #include<bits/stdc++.h> 2 3 using namespace std; 4 5 const int N = 1e5+5; 6 7 char a[N],b[N]; 8 9 struct bign{ 10 int d[N]; 11 int len; 12 bign(){ 13 memset(d,0,sizeof(d)); 14 len = 0; 15 } 16 }; 17 18 bign change(char *a){ 19 bign c; 20 c.len = strlen(a); 21 for(int i=0; i<c.len; i++){ 22 c.d[i] = a[c.len - i - 1] - ‘0‘; 23 } 24 return c; 25 } 26 27 bign sub(bign a,bign b){ 28 bign c; 29 for(int i=0; i<a.len; i++){ 30 if(a.d[i] < b.d[i]){ 31 a.d[i] += 10; 32 a.d[i+1]--; 33 } 34 c.d[c.len++] = a.d[i] - b.d[i]; 35 } 36 while(c.len>1 && !c.d[c.len-1]) c.len--; 37 return c; 38 } 39 40 void print(bign c){ 41 for(int i=c.len-1; i>=0; i--){ 42 printf("%d",c.d[i]); 43 } 44 } 45 46 int main(){ 47 scanf("%s%s",a,b); 48 int lena = strlen(a); 49 int lenb = strlen(b); 50 if(lena < lenb){ 51 printf("-"); 52 swap(a,b); 53 }else if(lena == lenb){ 54 for(int i=0; i<lena; i++){ 55 if(a[i] < b[i]){ 56 printf("-"); 57 swap(a,b); 58 break; 59 } 60 } 61 } 62 bign v1 = change(a); 63 bign v2 = change(b); 64 print(sub(v1,v2)); 65 return 0; 66 }
以上是关于高精度减法的主要内容,如果未能解决你的问题,请参考以下文章