zoukankan      html  css  js  c++  java
  • [51NOD]大数加法(模拟)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1005

    要处理符号,还要特别注意0和连续进位等情况。偷懒使用strcmp,但是前提必须是长度相等,否则是字典序。

     1 #include <algorithm>
     2 #include <iostream>
     3 #include <iomanip>
     4 #include <cstring>
     5 #include <climits>
     6 #include <complex>
     7 #include <fstream>
     8 #include <cassert>
     9 #include <cstdio>
    10 #include <bitset>
    11 #include <vector>
    12 #include <deque>
    13 #include <queue>
    14 #include <stack>
    15 #include <ctime>
    16 #include <set>
    17 #include <map>
    18 #include <cmath>
    19 
    20 using namespace std;
    21 
    22 const int maxn = 11111;
    23 char ca[maxn], cb[maxn], cs[maxn];
    24 
    25 void add(char* ca, char* cb) {
    26     int a[maxn];
    27     int b[maxn];
    28     memset(a, 0, sizeof(a));
    29     memset(b, 0, sizeof(b));
    30     int la = strlen(ca);
    31     int lb = strlen(cb);
    32     for(int i = 0; i < la; i++) a[i] = ca[la-i-1] - '0';
    33     for(int i = 0; i < lb; i++) b[i] = cb[lb-i-1] - '0';
    34     for(int i = 0; i < maxn; i++) {
    35         a[i] += b[i];
    36         a[i+1] += a[i] / 10;
    37         a[i] %= 10;
    38     }
    39     int p = maxn;
    40     while(p--) if(a[p] != 0) break;
    41     for(int i = p; i >= 0; i--) printf("%d", a[i]);
    42     printf("
    ");
    43 }
    44 
    45 void sub(char* ca, char* cb) {
    46     int a[maxn];
    47     int b[maxn];
    48     memset(a, 0, sizeof(a));
    49     memset(b, 0, sizeof(b));
    50     int la = strlen(ca);
    51     int lb = strlen(cb);
    52     for(int i = 0; i < la; i++) a[i] = ca[la-i-1] - '0';
    53     for(int i = 0; i < lb; i++) b[i] = cb[lb-i-1] - '0';
    54     for(int i = 0; i < la; i++) {
    55         if(a[i] >= b[i]) a[i] -= b[i];
    56         else {
    57             a[i] = a[i] - b[i] + 10;
    58             a[i+1]--;
    59         }
    60     }
    61     int p = maxn;
    62     while(p--) if(a[p] != 0) break;
    63     for(int i = p; i >= 0; i--) printf("%d", a[i]);
    64     printf("
    ");
    65 }
    66 
    67 int main() {
    68     // freopen("in", "r", stdin);
    69     memset(ca, 0, sizeof(ca));
    70     memset(cb, 0, sizeof(cb));
    71     scanf("%s %s", ca, cb);
    72     int la = strlen(ca);
    73     int lb = strlen(cb);
    74     if(ca[0] == '0' && cb[0] == '0') printf("0
    ");
    75     else if(ca[0] == '-' && cb[0] == '-') {
    76         printf("-");
    77         add(ca+1, cb+1);
    78     }
    79     else if(ca[0] != '-' && cb[0] != '-') add(ca, cb);
    80     else if(ca[0] == '-' && cb[0] != '-') {
    81         if(la - 1 < lb) sub(cb, ca+1);
    82         else if(strcmp(ca+1, cb) > 0) {
    83             printf("-");
    84             sub(ca+1, cb);
    85         }
    86         else if(strcmp(ca+1, cb) == 0) printf("0
    ");
    87         else sub(cb, ca+1);
    88     }
    89     else if(ca[0] != '-' && cb[0] == '-') {
    90         if(la - 1 < lb) sub(ca, cb+1);
    91         else if(strcmp(ca, cb+1) > 0) sub(ca, cb+1);
    92         else if(strcmp(ca, cb+1) == 0) printf("0
    ");
    93         else {
    94             printf("-");
    95             sub(cb+1, ca);
    96         }
    97     }
    98     return 0;
    99 }
  • 相关阅读:
    The formatter threw an exception while trying to deserialize the message in WCF
    通过Web Deploy方式部署WCF
    The Managed Metadata Service or Connection is currently not available
    How to create Managed Metadata Column
    冒泡算法
    asp.net core 实战项目(一)——ef core的使用
    Vue学习笔记入门篇——安装及常用指令介绍
    Vue学习笔记入门篇——数据及DOM
    Vue学习笔记目录
    Chart.js在Laravel项目中的应用
  • 原文地址:https://www.cnblogs.com/kirai/p/5408224.html
Copyright © 2011-2022 走看看