Javascript 如何创建复合数值变量等于指定值的公式?

Javascript 如何创建复合数值变量等于指定值的公式?,javascript,Javascript,如果你点击这篇文章,我知道这个问题有点不清楚。所以我必须让你明白我的意思 var value = 30; var num = 1; var total = 0; while(num < 10){ total +=num; num++; } if(total == value){ console.log("They are equivalent"); } var值=30; var-num=1; var合计=0; while(num考虑变量值< /强>, num < /强>, toTA

如果你点击这篇文章,我知道这个问题有点不清楚。所以我必须让你明白我的意思

var value = 30;
var num = 1;
var total = 0;

while(num < 10){

total +=num;
num++;

}
if(total == value){
console.log("They are equivalent");
}
var值=30;
var-num=1;
var合计=0;
while(num<10){
总数+=num;
num++;
}
如果(总==值){
console.log(“它们是等效的”);
}

< >考虑变量<强>值< /强>,<强> num < /强>,<强> toTA/强> L。当num小于10时,指定的值。我希望它将num值添加到total中,但在循环结束时,我希望total和value相等。我只是不知道该怎么做,也不知道我需要创建什么公式才能做到这一点。

你的计算结果不会给你30,如果你希望精确的合成方法在9次迭代后等于这个值,那么使用

var value =36;
这是因为

1+2+3+4+5+6+7+8 =36;

这种计算方法永远不会给你30

你的循环是计算算术级数的和,也称为an,从1开始,公差为1。数学上,级数为:

总数为:


在我看来,您似乎想要计算所需的n值(
num
,在代码中)作为Sn之和的预先指定值(
value
,在代码中)。我们可以通过求解上述n的求和方程来实现这一点

我们可以从以下方面重新安排:

这是一个很好的例子。插入:


下面是一个使用的上述结果的演示

首先,为了演示求和公式:

calcTotal <- function(num) num*(num+1L)/2L;
calcTotal(1:20);
##  [1]   1   3   6  10  15  21  28  36  45  55  66  78  91 105 120 136 153 171 190 210
首先,注意选择负数总是导致负数。因为我们只对积极的结果感兴趣,所以我们可以忽略这个专栏

其次,请注意加号的选择总是导致正数,但其中许多是非整数。这是有意义的,因为算术序列并不是所有可能的整数总和。对于满足级数整数基的总计,函数将返回正确的整数结果

我们可以使用自定义函数进行适当的浮点比较,将积分结果子集如下:

feq <- function(a,b,TOL=max(a,b)*1e-12) if (is.infinite(a) || is.infinite(b)) a==b else abs(a-b)<=TOL;
res[feq(res[,'+'],round(res[,'+'])),];
##      total +  -
## [1,]     1 1 -2
## [2,]     3 2 -3
## [3,]     6 3 -4
## [4,]    10 4 -5
## [5,]    15 5 -6
## [6,]    21 6 -7
## [7,]    28 7 -8
## [8,]    36 8 -9

这意味着我们需要对循环进行7.262087次迭代,以获得30的总值。当然,这是不可能的。

基本上你需要一个因素来增加你的价值

如果你只需要加上计数器,它从1到9,求和的公式是

你知道总数,你得到45分,那是非常多的。要获得正确的总和,您需要在添加之前乘以系数
num
。这只是我们的分工

wanted result / actual result = factor
      30      /       45      = 2 / 3  = 0.6666666666666667
这个因子可以在迭代中使用

为了准确起见,我建议使用等效分数

var值=30,
num=1,
总数=0;
while(num<10){
总计+=num*2/3;//应用系数
console.log(num,total);
num++;
}
如果(总计===值){
console.log(“它们是等效的”);

}
1+2+3+4+5+6+7=28
1+2+3+4+5+6+7+8=36
,这是怎么回事呢?我想你关注的是数字的值,而不是我说的,让我换一种方式说吧。如果num的值已循环10次以上,如何使其等于变量值。该值是30、50还是1000。我需要做什么公式才能使num value等于变量值,当它循环10次以上时我想如果你给我们举几个例子会有所帮助。给我们一个函数输入,它应该输出什么。while循环中允许发生什么?循环中的
num
是否可以大于10?
num
是否必须在每个循环周期中增加1?等如果你想
1+2+3+4+5+7+8=30
并且你想
num
在循环中增长,你需要使用回溯,否则如果
num
允许从9向后变为0,你可以使用贪婪累加器。这已经在我的评论(上面)中提到过,他澄清说这不是他想要的。当我回复我的手机应用程序没有刷新时,我猜,
calcNum(30);
##      total        +         -
## [1,]    30 7.262087 -8.262087
 sum = n * (n + 1) / 2
wanted result / actual result = factor
      30      /       45      = 2 / 3  = 0.6666666666666667