鱼C论坛

 找回密码
 立即注册
查看: 3035|回复: 9

非常大的值计算和存储问题

[复制链接]
发表于 2016-11-27 12:04:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求大神,怎么计算一个非常大的值,比如9的21次方?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-11-27 12:17:39 | 显示全部楼层
用double吧,表示范围比较大,负值取值范围为 -1.7976E+308 到 -4.94065645841246544E-324,正值取值范围为 4.94065645841246544E-324 到 1.797693E+308。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-27 13:00:23 | 显示全部楼层
pow(9,21)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-27 16:20:49 | 显示全部楼层
致年轻的我们 发表于 2016-11-27 12:17
用double吧,表示范围比较大,负值取值范围为 -1.7976E+308 到 -4.94065645841246544E-324,正值取值范围为 ...

比double还大的怎么办?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-27 16:54:56 | 显示全部楼层
无标题.png
  1. #include <iostream>
  2. #include <stack>
  3. using namespace std;


  4. stack<char> add(stack<char> a, stack<char> b)
  5. {
  6.         static stack<char> r;

  7.         int c = 0; // 进位
  8.         while((a.empty() == false) && (b.empty() == false))
  9.         {
  10.                 int t = (a.top() - '0') + (b.top() - '0') + c;
  11.                 if(t >= 10)
  12.                 {
  13.                         c = 1;
  14.                         t -= 10;
  15.                 }
  16.                 else
  17.                 {
  18.                         c = 0;
  19.                 }

  20.                 r.push(t + '0');

  21.                 a.pop();
  22.                 b.pop();
  23.         }

  24.         if(a.empty() == false)
  25.         {
  26.                 while(a.empty() == false)
  27.                 {
  28.                         int t = (a.top() - '0') + c;
  29.                         if(t >= 10)
  30.                         {
  31.                                 c = 1;
  32.                                 t -= 10;
  33.                         }
  34.                         else
  35.                         {
  36.                                 c = 0;
  37.                         }

  38.                         r.push(t + '0');

  39.                         a.pop();
  40.                 }
  41.         }
  42.         else
  43.         {
  44.                 while(b.empty() == false)
  45.                 {
  46.                         int t = (b.top() - '0') + c;
  47.                         if(t >= 10)
  48.                         {
  49.                                 c = 1;
  50.                                 t -= 10;
  51.                         }
  52.                         else
  53.                         {
  54.                                 c = 0;
  55.                         }

  56.                         r.push(t + '0');

  57.                         b.pop();
  58.                 }
  59.         }

  60.         if(c == 1)
  61.         {
  62.                 r.push('1');
  63.         }

  64.         return r;
  65. }

  66. int main(void)
  67. {
  68.         stack<char> c1, c2, c3;

  69.         cout << "大数加法\n" << "请输入第一个数,以#符合结尾:";

  70.         do
  71.         {
  72.                 char ch;
  73.                 cin >> ch;
  74.                 c1.push(ch);

  75.         } while(c1.top() != '#');
  76.         c1.pop(); // 去掉#符号

  77.         cout << "请输入第二个数,以#符合结尾:";

  78.         do
  79.         {
  80.                 char ch;
  81.                 cin >> ch;
  82.                 c2.push(ch);

  83.         } while(c2.top() != '#');
  84.         c2.pop(); // 去掉#符号

  85.         c3 = add(c1, c2);

  86.         cout << "结果是:\n";

  87.         while(c3.empty() == false)
  88.         {
  89.                 cout << c3.top();
  90.                 c3.pop();
  91.         }

  92.         cout << '\n';

  93.         return 0;
  94. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-27 22:41:57 | 显示全部楼层
建议用汇编语言的adc指令来实现....
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-28 16:26:40 | 显示全部楼层

那比如我要计算9的21次方呢?或者其他一个数的很大次方
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-28 16:33:07 | 显示全部楼层
学习电脑 发表于 2016-11-28 16:26
那比如我要计算9的21次方呢?或者其他一个数的很大次方

那就自己写那个pow函数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-28 20:46:25 | 显示全部楼层
用char 的数组来做
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-29 19:09:43 | 显示全部楼层

我都知道用数组,但怎么实现?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 05:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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