没有数据类型可以存储如此大的数字。使用数组
int a[pow(10,pow(10,18))]
再次赢得了这项工作,因为pow()
返回double
而double
无法存储10^(10^18)
。
有任何想法吗?
我试图解决the following problem:
考虑带N的整数 数字(十进制表示法,不带前导零)D 1 ,D 2 ,D 3 ,...,D N 。这里,D 1 是最高有效数字,D N 是最不重要的数字。该整数的权重定义为:
Σi= 2 - > N(D i -D i-1 )。
给出整数N和W.找到具有N位数(不带前导零)且权重等于W的正整数的数量。以10 9 +7计算此数字。
输入:
输入的第一行包含一个整数T,表示测试用例的数量。下面是T测试用例的描述。 每个测试用例的第一行和唯一一行包含两个以空格分隔的整数N和W,表示位数和所需的权重。
输出:
对于每个测试用例,打印一行包含一个整数 - 重量为W的N位正整数,模数10 9 +7。
约束:
答案 0 :(得分:7)
您不需要存储10 ^ 18位数字。看一下重量的定义:
Σi= 2 - > N(D i -D i-1 )
总和中的每个元素是两个连续数字的差异。
让我们以4位数字为例,其数字为D 1 ,D 2 ,D 3 ,D <子> 4 子>。然后总和是:
(D 2 - D 1 )+(D 3 - D 2 )+(D < sub> 4 - D 3 )
修改操作数:
D 4 - D 3 + D 3 - D 2 + D 2 - D 1
您会看到除了第一个和最后一个数字之外的所有数字都会被取消!所以总和是D 4 - D 1 。实际上,对于任意数量的数字N,总和是:
D N - D 1
因此只有第一个和最后一个数字是相关的。你应该能够从中找出其余部分。
答案 1 :(得分:0)
有用于处理这些问题的库,例如The GNU Multiple Precision Arithmetic Library:
什么是GMP?
GMP是一个用于任意精度算术的免费库,对有符号整数,有理数和浮点数进行操作。精度没有实际限制,除了机器GMP中可用内存所暗示的那些限制。 GMP具有丰富的功能,并且功能具有常规接口。
GMP的主要目标应用是加密应用和研究,互联网安全应用,代数系统,计算代数研究等。
但是10 ^ 18会占用巨大的(并且实际上是不可能的)内存量(如果我的数学是正确的:2.881 EiB)。
答案 2 :(得分:0)
referenced problem从2 ≤ N ≤ 10^18
获取输入。这不是10 ^ 18位数(或10 ^ 10 ^ 18,这是荒谬的巨大)但是18位数或2到1,000,000,000,000,000,000。这将适合64位整数,有符号或无符号。
10 ^ 18正在推动64位整数的极限,这可能是他们选择它的原因。任何更大的内容都应使用arbitrary precision math等GMP库。
......但是有限制。简单地存储这样的数字将需要大约100万千兆字节。因此,虽然问题在于解决10 ^ 18位数的数字,但我强烈怀疑你不应该通过实际存储这些数字来解决它。你应该采用一些数学技术。