超长字符整数的相加(UCWEB 2010校园招聘笔试)

本文介绍了一个使用C++实现的字符串倒序输出和大数相加的方法。通过对字符串进行倒序处理,实现了两个大数字符串的逐位相加,并考虑了进位的情况。该方法适用于处理传统整型变量无法容纳的大数值运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Code:
  1. /*****转帖请注明 原创于华南理工 吴泳添*****/
  2. #include <iostream>   
  3. using namespace std;   
  4. char * reverseOrderChar(char *a)   //倒序输出字符串   
  5. {   
  6.     int charLen = strlen(a);   
  7.     char *b = new char[charLen];   
  8.     for(int i  = 0; i<charLen ; i++)   
  9.     {   
  10.         b[i] = a[charLen - i - 1];   
  11.     }   
  12.     b[charLen] = '/0';   
  13.     return b;   
  14. }   
  15.   
  16. char * charNumPlus(char *a ,char *b ,int len,char *c)   
  17. {   
  18.     a = reverseOrderChar(a);  //先倒序,再相加   
  19.     b = reverseOrderChar(b);   
  20.     char *maxChar;   
  21.     int max,min;   
  22.     int wei, p=0;   
  23.     max = (strlen(a)/strlen(b)) ?strlen(a):strlen(b);   
  24.     min = (strlen(a)/strlen(b)) ?strlen(b):strlen(a);   
  25.     if (strlen(a)>=strlen(b)) //选出比较长的字符串   
  26.         maxChar = a;   
  27.     else    
  28.         maxChar = b;   
  29.     for (int i = 0 ; i < max ; i++)   
  30.     {   
  31.         if (i<min)   
  32.         {   
  33.             wei = (a[i]-'0') + (b[i]-'0')+ p;   
  34.             c[i] = wei%10 + '0' ;   
  35.             if (wei>=10)   
  36.                 p = 1;   
  37.             else  
  38.                 p = 0;   
  39.         }   
  40.         else  
  41.         {   
  42.             wei = (maxChar[i]-'0') + p;   
  43.             c[i] = ((maxChar[i]-'0') + p)%10+'0' ;   
  44.             if(wei >=10)   
  45.                 p = 1;   
  46.             else    
  47.                 p = 0;   
  48.         }   
  49.     }   
  50.     c[max] = p + '0' ;   
  51.   
  52.     if (c[max]=='0')    
  53.         c[max] = '/0';   
  54.     else    
  55.         c[max+1] = '/0';   
  56.     c = reverseOrderChar(c);   
  57.     return c;   
  58. }   
  59.   
  60. void main()   
  61. {   
  62.     char *str1 = "9999999999999999999999999";   
  63.     char *str2 = "987422222222222222222";   
  64.     char *resultstr = new char[100];   
  65.     resultstr = charNumPlus(str1,str2,100,resultstr);   
  66.     cout<<resultstr<<endl;   
  67. }  
  68. /*****转帖请注明 原创于华南理工 吴泳添*****/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值