Chinaunix首页 | 论坛 | 博客
  • 博客访问: 21240
  • 博文数量: 9
  • 博客积分: 25
  • 博客等级: 民兵
  • 技术积分: 57
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-27 10:58
文章分类

全部博文(9)

文章存档

2014年(6)

2013年(3)

我的朋友

分类: C/C++

2014-04-12 00:53:28


  1. #include <iostream>

  2. using namespace std;

  3. int addition(const char* num1, const char* num2, char* result)
  4. {
  5.     //参数检验
  6.     if (NULL == num1 || NULL == num2 || NULL == result)
  7.     {
  8.         return -1;
  9.     }

  10.     const char* pF = num1;
  11.     const char* pS = num2;

  12.     while (*pF != '\0')
  13.     {
  14.         if (*pF < '0' || *pF > '9')
  15.         {
  16.             return -1;
  17.         }
  18.         pF++;
  19.     }
  20.     pF--;
  21.     while (*pS != '\0')
  22.     {
  23.         if (*pS < '0' || *pS > '9')
  24.         {
  25.             return -1;
  26.         }
  27.         pS++;
  28.     }
  29.     pS--;

  30.     char* pRet = result;
  31.     bool OverFlag = false;//进位标志

  32.     while (pF != num1 - 1 && pS != num2 - 1)
  33.     {
  34.          *pRet = (*pF--) + (*pS--) - '0' + (OverFlag ? 1 : 0);
  35.         if (*pRet > 9 + '0')
  36.         {
  37.             *pRet -= 10;
  38.             OverFlag = true;
  39.         }
  40.         else
  41.         {
  42.             OverFlag = false;
  43.         }
  44.         pRet++;
  45.     }
  46.     while (pF != num1 - 1)
  47.     {
  48.          *pRet = (*pF--) + (OverFlag ? 1 : 0);
  49.         if (*pRet > 9 + '0')
  50.         {
  51.             *pRet -= 10;
  52.             OverFlag = true;
  53.         }
  54.         else
  55.         {
  56.             OverFlag = false;
  57.         }
  58.         pRet++;
  59.     }
  60.     while (pS != num2 - 1)
  61.     {
  62.          *pRet = (*pS--) + (OverFlag ? 1 : 0);
  63.         if (*pRet > 9 + '0')
  64.         {
  65.             *pRet -= 10;
  66.             OverFlag = true;
  67.         }
  68.         else
  69.         {
  70.             OverFlag = false;
  71.         }
  72.         pRet++;
  73.     }
  74.     if (OverFlag)
  75.     {
  76.         *pRet++ = '1';
  77.     }
  78.     *pRet = '\0';
  79.     pRet--;

  80.     while (pRet > result)
  81.     {
  82.         char ch = *pRet;
  83.         *pRet-- = *result;
  84.         *result++ = ch;
  85.     }

  86.     return 0;
  87. }

  88. int main()
  89. {
  90.     char q[2048];
  91.     char w[2048];
  92.     char ret[2052];

  93.     cin >> q >> w;
  94.     addition(q, w, ret);
  95.     cout << ret << endl;

  96.     return 0;
  97. }

阅读(788) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~