- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这也是一个与数学相关的问题,但我想用 C++ 实现它...所以,我有一个 2^n
形式的数字,我必须计算它的数字总和(以 10 为基数;P)。我的想法是用下面的公式来计算:
sum = (2^n mod 10) + (floor(2^n/10) mod 10) + (floor(2^n/100) mod 10) + ...
对于它的所有数字:floor(n/floor(log2(10)))
。
第一项很容易用模幂计算,但我在计算其他项时遇到了麻烦。由于 n
很大,而且我不想使用我的大整数库,所以我无法在没有模的情况下计算 pow(2,n)
。第一项的代码片段:
while (n--){
temp = (temp << 1) % 10;
};
但是第二个我不知道。我也不能单独floor
它们,因为它会给出'0'(2/10)。有可能实现这一目标吗?(http://www.mathblog.dk/project-euler-16/ 是更简单的解决方案。)当然,如果无法使用此方法,我会寻找其他方法。 (例如,将数字存储在字节数组中,如链接中的注释所示)。
编辑:感谢现有的答案,但我正在寻找一些数学方法来解决它。我刚刚想到了一个想法,可以在没有 bignum 或 digit-vectors 的情况下实现,我要测试它是否有效。
所以,我有上面的等式求和。但是 2^n/10^k
可以写成 2^n/2^(log2 10^k)
即 2^(n-k*log2 10 )
。然后我取它的小数部分和它的整数部分,并对整数部分进行模幂运算: 2^(n-k*log2 10) = 2^(floor(n-k*log2 10)) * 2^(fract( n-k*log2 10))
。在最后一次迭代之后,我还将它与分数模 10 相乘。如果它不起作用或者如果我在上述想法中的某个地方错了,我坚持使用 vector 解决方案并接受答案。
编辑: 好吧,似乎用非整数模做模幂运算是不可能的(?)(或者我还没有找到任何相关信息)。所以,我正在做基于数字/vector 的解决方案。
它没有给出好的值:(1390 而不是 1366):
typedef long double ldb;
ldb mod(ldb x, ldb y){ //accepts doubles
ldb c(0);
ldb tempx(x);
while (tempx > y){
tempx -= y;
c++;
};
return (x - c*y);
};
int sumofdigs(unsigned short exp2){
int s = 0;
int nd = floor((exp2) * (log10(2.0))) + 1;
int c = 0;
while (true){
ldb temp = 1.0;
int expInt = floor(exp2 - c * log2((ldb)10.0));
ldb expFrac = exp2 - c * log2((ldb)10.0) - expInt;
while (expInt>0){
temp = mod(temp * 2.0, 10.0 / pow(2.0, expFrac)); //modulo with non integer b:
//floor(a*b) mod m = (floor(a mod (m/b)) * b) mod m, but can't code it
expInt--;
};
ldb r = pow(2.0, expFrac);
temp = (temp * r);
temp = mod(temp,10.0);
s += floor(temp);
c++;
if (c == nd) break;
};
return s;
};
最佳答案
您可以使用其他问题 (C++ get each digit in int) 中提到的一些技术创建数字 vector ,然后迭代该 vector 并将所有内容相加。
关于c++ - 计算 floor(pow(2,n)/10) mod 10 - pow(2,n) 的数字总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21294581/
我有 floor(sqrt(floor(x))) .这是真的: 内部floor是多余的。 外floor是多余的。 最佳答案 显然,外层不是多余的,因为例如,sqrt(2)不是整数,因此 floor(s
如何将 floor 函数应用于 float 或 double 值以获得整数。我得到了 double 值:4.4497083717E10float Value:4.4497084E10 在我的函数中。我
这个问题在这里已经有了答案: Using bitwise OR 0 to floor a number (7 个答案) 关闭 6 年前。 我刚刚在一些 JavaScript 中看到了这个快捷方式。
PHP 中的 floor 函数行为异常。对于 16 个十进制值,它给出了下限值,但通过增加 1 个小数点来舍入。 $int = 0.99999999999999999; echo floor($int
这是我的 HTML: floor 1: {{Math.floor( value ) }} floor 2: {{value }} floor 3: {{value |
(floor) 在 C 中实际上是如何工作的?据 Techonthenet 报道。 com, In the C Programming Language, the floor function ret
我正在将我的 MATLAB 代码转换为 Excel 文档,但在转换以下公式时遇到困难。 x=(b/N)*(-floor(N/2):floor(N/2)) 如果例如 b =2 且 N = 5结果将是
与 math.floor 相比,使用整数除法运算符在性能上有什么好处吗? 7 // 2 结束 math.floor(7/2) 最佳答案 整数除法比 math.floor 函数调用快得多: >>> im
我有一个关于 Haskell 的问题 floor函数 - 它应该返回“不大于参数的最大整数”,但表达式 floor 3.9999999999999999 返回 4 而不是 3。它可能与 Double
我想用可变的十进制长度(在 iphone sdk 中)将小数点后的 double 取整。 这里有一些例子可以告诉你我的意思 NSLog(@"%f",[self floorMyNumber:34.524
我知道 float 通常会包含舍入误差。 当您取 float (或 double )的底限或上限以将其转换为整数时,结果值是否准确,或者“底限”值是否仍然是近似值? 基本上,像 floor(3.141
我正在尝试用 C++ 实现一个系统,我可以在其中判断数字是否为整数(小数点后的所有内容均为零)。为此,我使用了 if (sqrt(answer/2) == floor(sqrt(answer/2)))
我正在编写一段代码,我需要处理不一定在 0 到 1 范围内的 uvs(2D 纹理坐标)。例如,有时我会得到一个 u 分量为 1.2 的 uv。为了处理这个问题,我正在实现一个包装,它通过执行以下操作导
CREATE TABLE table_name (col_a double(10,2), col_b double(10,2), col_c double(10,2)); INSERT INTO ta
这个问题在这里已经有了答案: Why does Math.round(0.49999999999999994) return 1? (5 个答案) 关闭 8 年前。 我开发了一个 c++ 应用程序(
我需要一个函数来将正 double 四舍五入到最接近的整数。潜伏 aorund 我发现这种非常优雅的方式 int x = floor(y + 0.5); 我写了一个简单的测试程序: double a
在 C89 中,floor() 返回一个 double 值。以下是否保证有效? double d = floor(3.0 + 0.5); int x = (int) d; assert(x == 3)
floor() 函数向下舍入为最接近的整数。 语法 floor(x) 参数 描述 x 必需。一个数。 说
有谁知道方法/功能如何Int()或 floor()实现的? 我正在寻找以下相应的实现 abs()功能。 Int Abs (float x){ if x > 0 return x;
我的问题如下:log(1000,10) 返回 3,但 floor(log(1000,10)) 返回 2。如何解决这个问题? 我的 php 版本是 5.6.30-0+deb8u1。 最佳答案 因为 lo
我是一名优秀的程序员,十分优秀!