[ 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 }

 

posted @ 2016-09-19 17:06  Hadilo  阅读(208)  评论(0编辑  收藏  举报