C++实现两个大整数的相加(考虑到负数异常情况)

实现两个大整数的相加,首先应该排除直接使用int和long long的方法,这些方法很容易溢出,这里为了方便(是否可以使用更精简的结构存储?)采用char来存储整数,整体思路如下:

1. 对于整数n和m的字符串形式,按照数组索引的从大到小累加计算,直接将结果存储到对应的result字符串中,处理完毕后再将result逆序输出,需考虑0和-的输出情况;

2. 考虑到有负号的情况,一开始就需要判断负号字符,这里将(-,-)和(+,+)统一当成相加操作然后都是负号的话在结尾补上负号,对于(+,-)和(-,+)统一处理成(大-小)的形式然后在结尾补负号;比如对于20-500转换成-(-20+500),对于-500+20准换成-(500-20)。

3. 这里需要使用标志位nTake记录是否进位或借位;

4. 还要考虑是否有异常字符出现,使用全局变量gInvalid记录有无异常。

  1 #include<stdio.h>
  2 #include<string.h>
  3 
  4 #define Joshua_OJ
  5 
  6 bool gInvalid = false;
  7 
  8 // 0: equal, -1: n less m, 1: n bigger m
  9 int AbsIsEqual(char* n, char* m, int n_start, int n_end, int m_start, int m_end)
 10 {
 11     if ((n_end - n_start) > (m_end - m_start)) return 1;
 12     else if ((n_end - n_start) < (m_end - m_start)) return -1;
 13     else
 14     {
 15         int i = n_start;
 16         int j = m_start;
 17         while (i <= n_end && j <= m_end)
 18         {
 19             if (n[i] > m[j]) return 1;
 20             else if (n[i] < m[j]) return -1;
 21             ++i;
 22             ++j;
 23         }
 24     }
 25     return 0;
 26 }
 27 
 28 void BigNumberAdd(char* n, char* m, char* result)
 29 {
 30     gInvalid = false;
 31 
 32     if (n == NULL || m == NULL)
 33     {
 34         gInvalid = true;
 35         return;
 36     }
 37 
 38     int n_index = strlen(n) - 1;
 39     int m_index = strlen(m) - 1;
 40 
 41     // 负数特别处理
 42     int n_start = 0;
 43     int m_star
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值