zoukankan      html  css  js  c++  java
  • codeforces Educational Codeforces Round 5 A. Comparing Two Long Integers

    题目链接:http://codeforces.com/problemset/problem/616/A

    题目意思:顾名思义,就是比较两个长度不超过 1e6 的字符串的大小

    模拟即可。提供两个版本,数组版本 & 指针版本。

      (1)数组版本(短的字符串从高位处补0,直到跟长的字符串长度相同)

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cstring>
     5 using namespace std;
     6 
     7 const int maxn = 1e6 + 5;
     8 char a[maxn], b[maxn];
     9 int rev_a[maxn], rev_b[maxn];
    10 
    11 int cmp(int len)
    12 {
    13     int f = 0;   // 0: a=b;  1: a>b;  2: a<b
    14     // 比较的时候要从高位比起,存储的时候是从低位开始存的
    15     for (int i = len-1; i >= 0 && !f; i--) {
    16         if (rev_a[i] > rev_b[i]) {
    17             f = 1;
    18         }
    19         else if (rev_a[i] < rev_b[i]) {
    20             f = 2;
    21         }
    22     }
    23     return f;
    24 }
    25 
    26 int main()
    27 {
    28     #ifndef ONLINE_JUDGE
    29         freopen("in.txt", "r", stdin);
    30     #endif // ONLINE_JUDGE
    31 
    32     while (scanf("%s%s", a, b) != EOF) {
    33         int la = strlen(a);
    34         int lb = strlen(b);
    35 
    36         for (int i = 0; i < la; i++) {
    37             rev_a[la-i-1] = a[i]-'0';
    38         }
    39 
    40         for (int i = 0; i < lb; i++) {
    41             rev_b[lb-i-1] = b[i]-'0';
    42         }
    43 
    44         int flag = 0;
    45         // 保证比较的字符串长度相等, 0补上
    46         if (la < lb) {    // la < lb
    47             for (int i = 0; i < lb-la; i++) {
    48                 rev_a[la+i] = 0;
    49             }
    50             flag = cmp(lb);
    51         }
    52         else {            // la >= lb
    53             for (int i = 0; i < la-lb; i++) {
    54                 rev_b[lb+i] = 0;
    55             }
    56             flag = cmp(la);
    57         }
    58         if (flag == 1) puts(">");
    59         else if (flag == 2) puts("<");
    60         else puts("=");
    61     }
    62     return 0;
    63 }

      (2)指针版本(过滤前缀0之后,再逐位比较大小)

     1 /*
     2     指针版本
     3 */
     4 #include <iostream>
     5 #include <cstdio>
     6 #include <cstdlib>
     7 #include <cstring>
     8 using namespace std;
     9 
    10 const int maxn = 1e6 + 5;
    11 char a[maxn], b[maxn];
    12 
    13 int cmp(char *s1, char *s2)
    14 {
    15     // 过滤前缀 0
    16     while (*s1 == '0') {
    17         s1++;
    18     }
    19     while (*s2 == '0') {
    20         s2++;
    21     }
    22 
    23     int l1 = strlen(s1);
    24     int l2 = strlen(s2);
    25     if (l1 > l2) {
    26         return '>';
    27     }
    28     else if (l1 < l2) {
    29         return '<';
    30     }
    31     // a,b长度相等(l1 = l2)
    32     for (int i = 0; i < l1; i++) {
    33         if (*s1 < *s2) {     // 指针指向的值
    34             return '<';
    35         }
    36         else if (*s1 > *s2) {
    37             return '>';
    38         }
    39         s1++;    // 指针右移一位
    40         s2++;
    41     }
    42     return '=';
    43 }
    44 
    45 
    46 int main()
    47 {
    48     #ifndef ONLINE_JUDGE
    49         freopen("in.txt", "r", stdin);
    50     #endif // ONLINE_JUDGE
    51 
    52     while (scanf("%s%s", a, b) != EOF) {
    53         printf("%c
    ", cmp(a, b));
    54     }
    55     return 0;
    56 }
  • 相关阅读:
    css表格单元格间距设置
    JavaScript(js)设置输入焦点(focus)
    让div居中的方法
    Window.open()的使用
    getElementsByTagName的用法
    offsetTop获取top值
    js中indexof的使用
    jquery解析json数据
    iframe的使用
    WCF学习笔记Ⅲ
  • 原文地址:https://www.cnblogs.com/windysai/p/5137370.html
Copyright © 2011-2022 走看看