2

我正在尝试以下 SPOJ 问题。我想澄清一下,我不需要解决这个问题,这就是为什么我没有将这个问题标记为“算法”。

Multiply the given numbers. 

Input
n [the number of multiplications <= 1000]
l1 l2 [numbers to multiply (at most 10000 decimal digits each)]

Output
The results of multiplications.

Time Limit: 2 seconds.

我有一个简单的解决方案 O(n^2),这是我们在学校学习的方式(将输入读取为字符串并进行逐字符乘法)。我知道我可以通过 Karatsuba 方法进一步优化它。

问题:我现在的代码是 C++。我在网上读到通读scanf速度比cin. 鉴于输入大小如此之大,在这种情况下是否会产生显着差异?

如果有一个选择,我不想将 C 与 C++ 混合使用,因此任何关于如何改进输入流的想法都会非常有帮助。

谢谢

4

3 回答 3

4

使用sync_with_stdio

cin.sync_with_stdio(false);

这将关闭与 cstdio 流的同步并提高速度。

演示

于 2013-10-28T07:24:51.013 回答
0

虽然我永远不会对性能做出笼统的陈述,但在 SPOJ(尤其是 Pyramid 集群)上,我注意到cin和之间存在显着差异scanf

scanf如果您认为 I/O 限制了您,我会使用。

并且不要仅仅因为它在 C 中可用而忽略某些东西(那将是很多东西!)

于 2013-10-28T07:21:04.387 回答
-1

scanf()并且printf()也可以在 C++ 中使用。它不会将C 与 C++混合使用。
只需包含<cstdio>头文件。

当然scanf()和分别printf()cin和快得多cout

于 2013-10-28T07:28:56.813 回答