【问题标题】:How to convert a character string (which is beyond long long int's range) to integer value [duplicate]如何将字符串(超出 long long int 范围)转换为整数值
【发布时间】:2014-03-11 13:54:39
【问题描述】:

我知道 itoa 和 sprintf 可以完成这项任务,但所有这些都需要预先定义的 int 大小(如 int 、 long int 、 long long int ),但是如果我需要从中添加或减去一些东西怎么办99 的阶乘,假设存储在 char 字符串 s[200] 中; (这甚至超出了 long long int 的限制).....我该怎么办???

【问题讨论】:

  • 你为什么要这样做?
  • 假设我想在 99 的阶乘上加 10 或 20,那我该怎么办??
  • 那么您将自己实现它或使用处理大量数字的库。
  • 使用可以处理任意长数字的库。
  • @BlueMoon 如何实现,最重要的是如何存储??

标签: c


【解决方案1】:

处理如此大的数字的一种方法是使用整数数组。比如

int a[200]

并在使用考虑数字的每个数字的基本算术对数字执行操作时对数组执行操作,例如,考虑将 2 个数字 1234*4567 相乘,您所做的是,将 1234 存储在 a[] 中,将 4567 存储在 b 中[]。然后使用临时数组 c[],

4*7=28 so next
3*7+2(which can be computed as (int)28/10)=23
2*7+2=16
1*7+1=8

所以你在第一次迭代中得到 8638 将它存储在 c[] 然后,使用 6 即 1234*6 执行相同的操作并执行 8638+1234*6*10 我想现在你已经掌握了这些基本的数学知识。使用这种类型的基本数学方法对存储在数组中的大数执行操作。所有操作都可以通过使用这样的数字级操作来实现。

【讨论】:

  • 但是我如何添加整数数组???假设最后三位数字是 4、6、7 我该怎么做正常加法???
  • @6565850 我已经解释了如何将大数相乘。加法也一样,按数字加数字。
猜你喜欢
  • 2020-12-02
  • 1970-01-01
  • 2019-06-21
  • 1970-01-01
  • 1970-01-01
  • 2017-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多