相关疑难解决方法(0)

阶乘的数字之和

链接到原始问题

这不是一个功课问题.我只是觉得有人可能知道这个问题的真正解决方案.

2004年我参加了编程竞赛,出现了这个问题:

给定n,找到n!的数字之和.n可以是0到10000.时间限制:1秒.我认为每个测试集最多有100个数字.

我的解决方案非常快,但速度不够快,所以我让它运行一段时间.它构建了一组预先计算的值,我可以在我的代码中使用它.这是一个黑客攻击,但它确实有效.

但有一个人用大约10行代码解决了这个问题,它会立即给出答案.我相信它是某种动态编程,或者来自数论的东西.当时我们16岁,所以它不应该是"火箭科学".

有谁知道他可以使用什么样的算法?

编辑:如果我没有明确提出问题,我很抱歉.正如mquander所说,应该有一个聪明的解决方案,没有bugnum,只有简单的Pascal代码,几个循环,O(n 2)或类似的东西.1秒不再是约束.

我在这里发现,如果n> 5,则9除以阶乘的数字之和.我们还可以找到数字末尾有多少个零.我们可以用吗?

好的,来自俄罗斯的编程竞赛的另一个问题.给定1 <= N <= 2 000 000 000,输出N!mod(N + 1).这有点关系吗?

algorithm dynamic-programming sum-of-digits

49
推荐指数
4
解决办法
3万
查看次数

如何将一个巨大的整数(字符串格式)转换为十六进制格式?(C#)

给定一个潜在的巨大整数值(采用C#字符串格式),我希望能够生成其十六进制等效值.普通方法在这里不适用,因为我们正在谈论任意大数,50位或更多.我见过的技术使用了这样的技术:

// Store integer 182
int decValue = 182;
// Convert integer 182 as a hex in a string variable
string hexValue = decValue.ToString("X");
// Convert the hex string back to the number
int decAgain = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
Run Code Online (Sandbox Code Playgroud)

将无法工作,因为要转换的整数太大.

例如,我需要能够像这样转换字符串:

843370923007003347112437570992242323

到十六进制当量.

这些不起作用:

C#将整数转换为十六进制再返回 如何在C#中转换十六进制和十进制之间的数字?

c# hex types type-conversion

17
推荐指数
2
解决办法
3067
查看次数

取幂的前n位数

如何确定取幂的前n位数(a b).

eg: for a = 12, b = 13 & n = 4, the first 4 digits are 1069.
Run Code Online (Sandbox Code Playgroud)

c c++ math exponentiation

8
推荐指数
3
解决办法
2728
查看次数

从C程序中保存大量数值数据(GB)的最佳格式是什么?

我是一名物理学家,通常处理使用C程序生成的大量数值数据.通常,我将所有内容存储为ASCII文件中的列,但这导致了大量文件.鉴于我的空间有限,这是一个问题,我想对整个事情有点聪明.所以......

  1. 是否有比ASCII更好的格式?我应该使用二进制文件,还是自定义格式的某些库?

  2. 我应该单独压缩每个文件,还是整个目录?在任何一种情况下,我应该使用什么格式?

非常感谢!

c file-io

5
推荐指数
2
解决办法
2183
查看次数

用C ++编写完全精确的float

在C ++中,我可以在不损失精度的情况下以文本格式写和读浮点数(或双精度数)吗?

考虑以下:

float f = ...;
{
    std::ofstream fout("file.txt");
    // Set some flags on fout
    fout << f;
 }
 float f_read;
 {
     std::ifstream fin("file.txt");
     fin >> f;
  }
  if (f != f_read) {
      std::cout << "precision lost" << std::endl;
  }
Run Code Online (Sandbox Code Playgroud)

我了解为什么有时会丢失精度。但是,如果我用足够的位数打印该值,则应该能够读回完全相同的值。

是否有给定的标志集可以确保永远不会丢失精度?这种行为可以跨平台移植吗?

c++ floating-point io

5
推荐指数
3
解决办法
3467
查看次数

如何在C中使用两个32位整数作为64位?

我正在使用一个库,该库返回一个带有时间戳的结构,该时间戳由两个(TimestampHi,TimestampLo)unsigned longs表示.我几乎只需要打印出%lluprintf中的时间戳.

从这两个整数中获取数据并将其正确用作uint64_t的最简单方法是什么?

c linux

1
推荐指数
1
解决办法
1133
查看次数

如何计算double/float C++中的位数

我正在尝试计算double的小数部分的位数,但是出现问题并且我得到无限循环:

double pi = 3.141592;
int counter = 0;
for (; pi != int(pi); ++counter)
    pi *= 10;
cout << counter << endl;
Run Code Online (Sandbox Code Playgroud)

我刚读过这个问题,但是我找不到一个好的解决方案.除了将数字转换为字符串和计数字符之外,真的没有更好的方法吗?我想有更正确的方法.

c++ math fractions

0
推荐指数
1
解决办法
6558
查看次数

如何计算浮点型精度,是否有意义?

我在理解浮点类型的精度时遇到问题。msdn将该精度写入6 到 9 位数字。但我注意到精度取决于数字的大小:

  float smallNumber = 1.0000001f;
  Console.WriteLine(smallNumber); // 1.0000001

  bigNumber = 100000001f;
  Console.WriteLine(bigNumber); // 100000000

Run Code Online (Sandbox Code Playgroud)

smallNumber 比 big 更精确,我了解 IEEE754,但我不明白 MSDN 如何计算精度,这是否有意义?

此外,您可以在此处使用浮点格式的数字表示。请在“您输入”输入中输入 100000000 值,然后单击右侧的“+1”。然后将输入的值更改为 1,并再次单击“+1”。您可能会看到精度上的差异。

c# math floating-point ieee-754

0
推荐指数
1
解决办法
291
查看次数