鱼C论坛

 找回密码
 立即注册
楼主: 小甲鱼

[技术交流] 任意长度的大数加法(栈的应用)

  [复制链接]
发表于 2016-7-21 16:15:08 | 显示全部楼层
123333333333333
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-4 22:17:17 From FishC Mobile | 显示全部楼层
我来
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-8 10:49:14 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-10 14:00:44 | 显示全部楼层
学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-10-30 14:48:27 | 显示全部楼层
感觉很6
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-31 22:24:02 | 显示全部楼层
写了三个while,感觉复杂度有些高,不知对不对
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-16 09:57:55 | 显示全部楼层
我写的感觉好复杂用了三个stack

  1. #include<iostream>

  2. using namespace std;


  3. const int STOCK_SIZE = 100;//定义栈的大小  

  4. template<class DataType>
  5. class DSStack
  6. {
  7. public:
  8.         DSStack(DataType[], int);
  9.         DSStack();
  10.         ~DSStack();
  11.         void Push(DataType data);
  12.         DataType Pop();
  13.         void Clear();
  14.         void Print();
  15.         DataType GetTopData();
  16. private:
  17.         DataType elem[STOCK_SIZE];
  18.         DataType *top;
  19.         DataType *bottom;
  20.         int Count;
  21. };

  22. template<class DataType>
  23. DSStack<DataType>::DSStack(DataType data[], int len)
  24. {
  25.         bottom = elem;  // 栈底初始指向
  26.         top = bottom;   // 初始栈底与栈顶指针指向相同的位置
  27.         for (int i = 1; i <= len; i++)
  28.         {
  29.                 elem[i] = data[i];
  30.                 Count++;
  31.         }
  32. }

  33. template<class DataType>
  34. DSStack<DataType>::DSStack()
  35. {
  36.         bottom = elem;  // 栈底初始指向
  37.         top = bottom;   // 初始栈底与栈顶指针指向相同的位置
  38.         Count = 0;
  39. }

  40. template<class DataType>
  41. DSStack<DataType>::~DSStack()
  42. {
  43. }

  44. template<class DataType>
  45. void DSStack<DataType>::Push(DataType data)
  46. {
  47.         if (Count > STOCK_SIZE) return;
  48.         Count++;
  49.         elem[Count] = data;
  50. }

  51. template<class DataType>
  52. DataType DSStack<DataType>::Pop()
  53. {
  54.         if (Count < 1)  return -1;
  55.         DataType data;
  56.         data = elem[Count];
  57.         Count--;
  58.         return data;
  59. }

  60. template<class DataType>
  61. void DSStack<DataType>::Clear()
  62. {
  63.         top = bottom;
  64.         Count = 0;
  65. }

  66. template<class DataType>
  67. void DSStack<DataType>::Print()
  68. {
  69.         cout << "栈的数据: " << endl;
  70.         for (int i = 1; i <= Count; i++)
  71.         {
  72.                 cout << " " << elem[i] << endl;
  73.         }
  74. }

  75. template<class DataType>
  76. DataType DSStack<DataType>::GetTopData()
  77. {
  78.         if (Count == 0) return -1;
  79.         return elem[Count];
  80. }

  81. void main()
  82. {
  83.         DSStack<char> *stack_addend = new DSStack<char>();
  84.         DSStack<char> *stack_augend = new DSStack<char>();
  85.         DSStack<int> *stack_retult = new DSStack<int>();

  86.         cout << "请输入加数以#结束" << endl;
  87.         char s = ' ';
  88.         cin >> s;
  89.         while (s != '#')
  90.         {
  91.                 stack_addend->Push(s);
  92.                 cin >> s;
  93.         }
  94.         stack_addend->Print();

  95.         cout << "请输入被加数以#结束" << endl;
  96.         s = ' ';
  97.         cin >> s;
  98.         while (s != '#')
  99.         {
  100.                 stack_augend->Push(s);
  101.                 cin >> s;
  102.         }
  103.         stack_augend->Print();
  104.         bool is_carry = false;  // 是否进位
  105.         while ((stack_addend->GetTopData() != -1) || (stack_augend->GetTopData() != -1) || is_carry)
  106.         {
  107.                
  108.                 // 考虑到两个数的位数不一定相等,把没有的弄为0
  109.                 if (stack_addend->GetTopData() == -1)
  110.                 {
  111.                         stack_addend->Pop();
  112.                         stack_addend->Push(48);  
  113.                 }
  114.                 if (stack_augend->GetTopData() == -1)
  115.                 {
  116.                         stack_augend->Pop();
  117.                         stack_augend->Push(48);
  118.                 }

  119.                 char addend = stack_addend->Pop();
  120.                 char augend = stack_augend->Pop();

  121.                 int result = 0;
  122.                 if (is_carry)
  123.                 {
  124.                         result = ((int)addend - 48) + ((int)augend - 48) + 1;
  125.                         is_carry = false;
  126.                 }
  127.                 else
  128.                 {
  129.                         result = ((int)addend - 48) + ((int)augend - 48);
  130.                 }
  131.                
  132.                 if (result >= 10) // 如果的出来的结果是两位数
  133.                 {
  134.                         int temp = result % 10;
  135.                         stack_retult->Push(temp);
  136.                         is_carry = true;
  137.                         //stack_retult->Push(result / 10);
  138.                 }
  139.                 else
  140.                 {
  141.                         stack_retult->Push(result);
  142.                 }
  143.                
  144.         }

  145.         stack_retult->Print();
  146.         getchar();
  147.         getchar();
  148. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-1 02:31:53 | 显示全部楼层
学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-7-20 21:57:14 | 显示全部楼层
啊师傅
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2017-8-25 15:21:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-25 21:27:53 | 显示全部楼层
看看
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-9-18 08:03:19 | 显示全部楼层
谢谢小甲鱼老师啊啊啊啊啊啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-26 09:58:21 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-9-26 16:44:38 From FishC Mobile | 显示全部楼层
对答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-15 22:32:59 | 显示全部楼层
学习学习。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-23 12:00:05 | 显示全部楼层
a
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-12-30 11:15:20 | 显示全部楼层
就能
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-2-3 09:29:18 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-2-3 10:57:28 | 显示全部楼层
carry是char型的,但赋值时carry = 0,可以将整形数据赋值给字符型吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-3 10:58:25 | 显示全部楼层
谁参照它编一个减法器、乘法器
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-27 12:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表