zoukankan      html  css  js  c++  java
  • [ 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]!='') c[i++]='';
    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]!='') 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]='';
    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]='';
    68     i=0;
    69     while ((y[i++]=getchar())!='
    ');
    70     i--;
    71     y[i]='';
    72     multy();
    73     puts(s);
    74     return 0;
    75 }
  • 相关阅读:
    DockerCompose安装与快速体验
    Nginx:Docker部署与负载均衡开发实践
    JAVA基础:反射基础
    JVM:类加载机制
    JAVA基础:注解应用示例
    JAVA基础:注解机制
    JAVA并发(五):关键词final
    JAVA并发(四):关键词volatile
    Linux虚拟机配置作为旁挂路由器
    Linux起不来,如何修复
  • 原文地址:https://www.cnblogs.com/hadilo/p/5886311.html
Copyright © 2011-2022 走看看