zoukankan      html  css  js  c++  java
  • 二十进制数的加法

    CSDN编程挑战里的题目

    在二十进制中,我们除了使用数字0-9以外,还使用字母a-j(表示10-19),
    给定两个二十进制整数,求它们的和。 输入是两个二十进制整数,且都
    大于0,不超过100位; 输出是它们的和(二十进制),且不包含首0。我
    们用字符串来表示二十进制整数。

    可惜我提交了6次才正确,我想要确保有抽奖的可能,需要申请两个帐号,一个做炮灰,另一个一击命中.

      1 #include <cmath>
      2 #include <cstring>
      3 #include <cstdio>
      4 
      5 static int GetNum(char c)
      6 {
      7     if (c >= '0' && c <= '9')
      8     {
      9         return c - '0';
     10     }
     11     else if (c >= 'a' && c <= 'z')
     12     {
     13         return c + 10 - 'a';
     14     }
     15     else if (c >= 'A' && c <= 'Z')
     16     {
     17         return c + 10 - 'A';
     18     }
     19     else
     20     {
     21         return -1;
     22     }
     23 }
     24 
     25 static char GetChar(int num)
     26 {
     27     if (num >= 0 && num <= 9)
     28     {
     29         return '0' + num;
     30     }
     31     else
     32     {
     33         return 'A' + num - 10;
     34     }
     35 }
     36 
     37 static void InverseString(char* szString)
     38 {
     39     unsigned int len = strlen(szString);
     40     char c;
     41     for (unsigned int i = 0; i < len/2; i++)
     42     {
     43         c = szString[i];
     44         szString[i] = szString[len - 1 - i];
     45         szString[len - 1 - i] = c;
     46     }
     47 }
     48 
     49 static void Calculate(const char* szA, const char* szB, char* szDest, unsigned int jinzhi = 20)
     50 {
     51     bool ad = false;
     52     unsigned int lenA = strlen(szA);
     53     unsigned int lenB = strlen(szB);
     54 
     55     unsigned int pos = 0;
     56     int valueA;
     57     int valueB;
     58     int valueAdd;
     59 
     60     while (pos < lenA || pos < lenB)
     61     {
     62         if (pos < lenA)
     63         {
     64             valueA = GetNum(szA[pos]);
     65         }
     66         else
     67         {
     68             valueA = 0;
     69         }
     70 
     71         if (pos < lenB)
     72         {
     73             valueB = GetNum(szB[pos]);
     74         }
     75         else
     76         {
     77             valueB = 0;
     78         }
     79 
     80         valueAdd = valueA + valueB;
     81         if (ad)
     82         {
     83             valueAdd++;
     84         }
     85         ad = (valueAdd >= jinzhi);
     86 
     87         if (ad)
     88         {
     89             valueAdd -= jinzhi;
     90         }
     91 
     92         szDest[pos] = GetChar(valueAdd);
     93         pos++;
     94     }
     95 
     96     if (ad)
     97     {
     98         szDest[pos] = '1';
     99         pos++;
    100     }
    101     szDest[pos] = 0;
    102 }
    103 
    104 void CalculateRadix20(const char* x, const char* y, char* szDest)
    105 {
    106     char szA[256];
    107     char szB[256];
    108 
    109     strcpy(szA, x);
    110     strcpy(szB, y);
    111 
    112     InverseString(szA);
    113     InverseString(szB);
    114 
    115     Calculate(szA, szB, szDest);
    116     InverseString(szDest);
    117 }

     

  • 相关阅读:
    boost-1.53源代码编译
    Hive分析窗体函数之NTILE,ROW_NUMBER,RANK和DENSE_RANK
    外接圆、内切圆半径公式及相应关系知识点总结
    最小生成树之Prim算法
    JavaScript实现简单图片滚动 --9张图告诉你,C罗欲哭无泪
    Scala入门到精通——第二十七节 Scala操纵XML
    第二十一篇:基​于​W​D​M​模​型​的​A​V​S​t​r​e​a​m​驱​动​架​构​研​究
    oracle表空间查询维护命令大全之中的一个(数据表空间)史上最全
    项目流程管理&amp;&amp;架构总结
    AIX常用命令略记
  • 原文地址:https://www.cnblogs.com/WhyEngine/p/3520507.html
Copyright © 2011-2022 走看看