Chinaunix首页 | 论坛 | 博客
  • 博客访问: 46655
  • 博文数量: 17
  • 博客积分: 455
  • 博客等级: 下士
  • 技术积分: 171
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-07 21:27
文章分类

全部博文(17)

文章存档

2013年(8)

2012年(9)

我的朋友

分类: LINUX

2012-06-16 21:52:59

http://blog.chinaunix.net/uid-21843387-id-105888.html

点击(此处)折叠或打开

  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4. char *AddBigInt(char *str1, char *str2)
  5. {
  6.  int carry = 0; //进位,初始化为0
  7.  int i = strlen(str1) - 1; //指向第一个加数的最低位
  8.  int j = strlen(str2) - 1; //指向第二个加数的最低位
  9.  int maxLen = strlen(str1) >= strlen(str2) ?
  10.   (strlen(str1) + 1) : (strlen(str2) + 1);
  11.  char *result = new char[maxLen + 1];
  12.  result[maxLen] = '\0'; //字符串最后一位为'\0'
  13.  int k = strlen(result) - 1; //指向结果数组的最低位
  14.  while((i >= 0)&&(j >= 0))
  15.  {
  16.   result[k] = ((str1[i] - '0') + (str2[j] - '0' + carry))%10 + '0';
  17.   carry = ((str1[i] - '0') + (str2[j] - '0' + carry))/10;
  18.   --i;
  19.   --j;
  20.   --k;
  21.  }
  22.  while(i >= 0)
  23.  {
  24.   result[k] = ((str1[i] - '0') + carry)%10 + '0';
  25.   carry = ((str1[i] - '0') + carry)/10;
  26.   --i;
  27.   --k;
  28.  }
  29.  while(j >= 0)
  30.  {
  31.   result[k] = ((str2[j] - '0') + carry)%10 + '0';
  32.   carry = ((str2[j] - '0') + carry)/10;
  33.   --j;
  34.   --k;
  35.  }
  36.  result[0] = carry + '0';

  37.  if(result[0] != '0')
  38.   return result;
  39.  else
  40.   return (result + 1);
  41. }
  42. int main()
  43. {
  44.  char num1[] = "123456789323";
  45.  char num2[] = "45671254563123";
  46.  char *result = NULL;
  47.  result = AddBigInt(num1, num2);
  48.  cout<<num1<<" + "<<num2<<" = ";
  49.  cout<<result<<endl;
  50.  return 0;
  51. }

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