[ CodeVS冲杯之路 ] P3115
不充钱,你怎么AC?
题目:http://codevs.cn/problem/3115/
基础的高精度减法,先判断一下被减数是否小于减数,若是则交换位置,打上 “-” 负号
当然也可以用压位做
1 #include<algorithm> 2 #include<iostream> 3 #include<cstdlib> 4 #include<cstring> 5 #include<cstdio> 6 #include<cmath> 7 using namespace std; 8 9 char a[600],b[600],c[600]; 10 bool small() 11 { 12 int la=strlen(a),lb=strlen(b),i=0; 13 if (la<lb) return 1; 14 else if (la>lb) return 0; 15 while (a[i]==b[i]&&i<la) i++; 16 if (a[i]<b[i]) return 1; 17 return 0; 18 } 19 void dec() 20 { 21 int i=strlen(a)-1,j=strlen(b)-1,k=0; 22 while (i>=0) 23 { 24 c[i]=a[i]-k-'0'; 25 if (j>=0) c[i]-=b[j]-'0'; 26 if (c[i]<0) 27 { 28 k=1; 29 c[i]+=10+'0'; 30 } 31 else 32 { 33 k=0; 34 c[i]+='0'; 35 } 36 i--; 37 j--; 38 } 39 i=0; 40 while (c[i]=='0') i++; 41 j=0; 42 while (c[i]!='\0') 43 { 44 c[j]=c[i]; 45 i++; 46 j++; 47 } 48 c[j]='\0'; 49 } 50 int main() 51 { 52 int i; 53 i=0; 54 while ((a[i++]=getchar())!=' '); 55 i--; 56 a[i]='\0'; 57 i=0; 58 while ((b[i++]=getchar())!='\n'); 59 i--; 60 b[i]='\0'; 61 if (small()) 62 { 63 swap(a,b); 64 printf("-"); 65 } 66 dec(); 67 puts(c); 68 return 0; 69 }