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

来源:互联网 发布:大学室友关系知乎 编辑:程序博客网 时间:2024/04/30 14:37
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. /*****转帖请注明 原创于华南理工 吴泳添*****/

 

原创粉丝点击