• Hdu 2100 Lovekey 模拟大数相加<进位转换..>


    题意:

    用A~Z表示0~25..

    给出2个200以内的XYZ-26进制数..即a0 a1 a2 a3……an

    求出和..用XYZ-26进制表示..

    其中XYZ-26 -> 10进制是m = a0 * 26^(n-1) + a1 * 26^(n-2) + … + an-3* 26^2 + an-2*26 + an-1 

    思路:

    不用进行转换然后相加再换回去..

    直接相加..

    模拟进位..

    Tips:

    ※可以直接把短的加到长的字符串上..eg:ABC+CD就是           ABC

                                         +  CD

                                       ------------

                                          BFL

    ※ 主要是进位的时候要考虑清楚..

    ※ 在长字符串上处理..就不用担心不知道该在前面保留多少位的问题了..

    ※ 输出去前导无意义 ‘A' 的时候要考虑到AAAAA的情况..最后输出'A'

     

    Code:

    View Code
     1 #include <stdio.h>
     2 #include <cstring>
     3 
     4 void add(char *a, char *b)
     5 {
     6     int i, j, k;
     7     int len1, len2;
     8     int tmp=0;
     9     len1 = strlen(a), len2 = strlen(b);
    10     for(i = len1-1, j = len2-1; i >= 0;){
    11         if(j >= 0){
    12             a[i] = a[i] - 'A' + b[j] + tmp;
    13             tmp = 0;
    14             if(a[i] > 'Z'){
    15                 a[i] -= ('Z' - 'A' + 1);
    16                 tmp = 1;
    17             }
    18             --i, --j;
    19         }
    20         else{
    21             a[i] = a[i] + tmp;
    22             tmp = 0;
    23             if(a[i] > 'Z'){
    24                 a[i] -= ('Z'-'A'+1);
    25                 tmp = 1;
    26             }
    27             --i;
    28 
    29         }
    30     }
    31     if(tmp){
    32         for(i = len1; i >= 0; --i)
    33             a[i+1] = a[i];
    34         a[0] = 'B';
    35     }
    36 
    37 }
    38 
    39 void outPut(char *a)
    40 {
    41     int len = strlen(a);
    42     bool flag = false;
    43     for(int i = 0; i < len; ++i){
    44         if(a[i] != 'A') flag = true;
    45         if(flag) printf("%c", a[i]);
    46     }
    47     if(!flag) puts("A");
    48     else puts("");
    49 }
    50 
    51 int main()
    52 {
    53     char arr1[210], arr2[210];
    54     int len1, len2;
    55     while(scanf("%s %s", arr1, arr2) != EOF)
    56     {
    57         len1 = strlen(arr1);
    58         len2 = strlen(arr2);
    59         if(len1 > len2){
    60             add(arr1, arr2);
    61             outPut(arr1);
    62         }
    63         else{
    64             add(arr2, arr1);
    65             outPut(arr2);
    66         }
    67     }
    68     return 0;
    69 }

    高精度到此完一段落了..其实还有几题没做..到时候再说吧~Hdu 1250 1297 1905

  • 相关阅读:
    PHP面向对象练习
    PHP面向对象的特点
    PHP的构造函数和析构函数
    PHP面向对象
    AVL-TREE
    ReentrantLock
    treap-名次树-树堆
    细数那些我们熟悉的 排序!
    数据结构 - trie
    python 凸包(经纬度) + 面积[近似]
  • 原文地址:https://www.cnblogs.com/Griselda/p/2626903.html
Copyright © 2020-2023  润新知