[ CodeVS冲杯之路 ] P3117

  不充钱,你怎么AC?

  题目:http://codevs.cn/problem/3117/

 

  啊啊啊,基础的高精度乘法被我写得又臭又长,以后再来优化代码(DP着哪天能够把加减乘除全部写一边贴上来,哦对还有开根)

  这里依然使用的是模拟手算

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<cmath>
 7 using namespace std;
 8 
 9 const int N=600;
10 char s[N*2],c[N*2],now[N],x[N],y[N];
11 void Plus(char *c,char *a,char *b)
12 {
13     int la,lb,i=0,k;
14     while (c[i]!='\0') c[i++]='\0';
15     la=strlen(a)-1;
16     lb=strlen(b)-1;
17     i=max(la,lb)+1;
18     k=0;
19     while (i>=0)
20     {
21         if (la>=0) k+=a[la--]-'0';
22         if (lb>=0) k+=b[lb--]-'0';
23         c[i--]=k%10+'0';
24         k/=10;
25     }
26     if (c[0]!='1') while (c[++i]!='\0') c[i]=c[i+1];
27 }
28 void multy()
29 {
30     int i=strlen(x)-1,j=strlen(y)-1,la,lb,k,l;
31     la=i;
32     lb=j;
33     for (;i>=0;i--)
34         {
35             for (j=lb;j>=0;j--)
36                 {
37                     k=(x[i]-'0')*(y[j]-'0');
38                     if (k>9)
39                         {
40                             now[1]=k%10+'0';
41                             now[0]=k/10+'0';
42                             l=2;
43                         }
44                     else
45                         {
46                             now[0]=k+'0';
47                             l=1;
48                         }
49                     k=la-i+lb-j;
50                     while (k>0)
51                         {
52                             k--;
53                             now[l++]='0';
54                         }
55                     now[l]='\0';
56                     strcpy(c,s);
57                     Plus(s,c,now);
58                 }
59         }
60 }
61 int main()
62 {
63     int i;
64     i=0;
65     while ((x[i++]=getchar())!=' ');
66     i--;
67     x[i]='\0';
68     i=0;
69     while ((y[i++]=getchar())!='\n');
70     i--;
71     y[i]='\0';
72     multy();
73     puts(s);
74     return 0;
75 }

 

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