当前位置: 首页 > 编程笔记 >

计算从1到n的所有数字的数字总和

郎和通
2023-03-14
本文向大家介绍计算从1到n的所有数字的数字总和,包括了计算从1到n的所有数字的数字总和的使用技巧和注意事项,需要的朋友参考一下

在此问题中,我们必须找到范围为1到n的所有数字的数字总和。例如,54的数字总和为5 + 4 = 9,像这样,我们必须找到所有数字及其数字总和。

我们知道可以生成10个d-1数字,其位数为d。为了找到所有这些数字d的总和,我们可以使用一个递归公式。

sum(10 d -1)= sum(10 d- 1-1)* 10 + 45 *(10 d-1

输入输出

Input:
This algorithm takes the upper limit of the range, say it is 20.
Output:
Sum of digits in all numbers from 1 to n. Here the result is 102

算法

digitSumInRange(n)

输入: 范围的上限。

输出-范围(1-n)中所有数字的数字总和。

Begin
   if n < 10, then
      return n(n+1)/2
   digit := number of digits in number
   d := digit – 1
   define place array of size digit
   place[0] := 0
   place[1] := 45

   for i := 2 to d, do
      place[i] := place[i-1]*10 + 45 * ceiling(10^(i-1))
      power := ceiling(10^d)
      msd := n/power
      res := msd*place[d] + (msd*(msd-1)/2)*power +
             msd*(1+n mod power) + digitSumInRange(n mod power)
      return res
   done
End

示例

#include<iostream>
#include<cmath>
using namespace std;

int digitSumInRange(int n) {
   if (n<10)
      return n*(n+1)/2;          //when one digit number find sum with formula
   int digit = log10(n)+1;       //number of digits in number
      int d = digit-1;           //decrease digit count by 1
   
   int *place = new int[d+1];    //create array to store sum upto 1 to 10^place[i]
   place[0] = 0;
   place[1] = 45;

   for (int i=2; i<=d; i++)
      place[i] = place[i-1]*10 + 45*ceil(pow(10,i-1));

   int power = ceil(pow(10, d));    //computing the power of 10
   int msd = n/power;               //find most significant digit
   return msd*place[d] + (msd*(msd-1)/2)*power +
      msd*(1+n%power) + digitSumInRange(n%power);    //recursively find the sum
}

int main() {
   int n;
   cout << "Enter upper limit of the range: ";
   cin >> n;
   cout << "Sum of digits in range (1 to " << n << ") is: " << digitSumInRange(n);
}

输出结果

Enter upper limit of the range: 20
Sum of digits in range (1 to 20) is: 102
 类似资料:
  • 本文向大家介绍Python从1到n的数字总和,包括了Python从1到n的数字总和的使用技巧和注意事项,需要的朋友参考一下 示例 如果我想找出数从和1到n哪里n是自然数,我能做到1 + 2 + 3 + 4 + ... + (several hours later) + n。另外,我可以编写一个for循环: 或者我可以使用一种称为递归的技术: 递归相对于以上两种方法具有优势。递归所需的时间少于写出1

  • 北卡罗来纳州彩票提供了几场平局游戏,其中两场是选3和选4。在0和9(含9)之间分别选择3或4位数字,数字可以重复(例如,9-9-9是有效的组合)。在这个例子中,我将使用Pick3,因为它更容易使用,但我试图使它成为一个通用的解决方案,可以使用任何数量的数字。 选3和选4的一个特点是“1选1”,这意味着如果至少有一个号码比你的票上的号码高1或低1,你就赢了一个奖。

  • 问题内容: 给定大小数组,我想为每个索引生成随机概率,这样 一种可能的结果可能是: 另一个完全合法的结果可能是: 我怎样才能轻松快捷地生成这些?任何语言的答案都可以,最好是Java。 问题答案: 您要完成的任务无异于从N维单位单纯形中绘制随机点。 http://en.wikipedia.org/wiki/Simplex#Random_sampling可能会对您有所帮助。 一个幼稚的解决方案可能如下

  • 问题内容: 我正在寻找一种以Java字节数组作为消息获取SHA-1校验和的方法。 我应该使用第三方工具还是JVM内置的某些工具可以帮助您? 问题答案: 关于什么:

  • 问题内容: 我想计算所有奇数数组索引的总和,但是在寻找正确的方法时遇到了一些麻烦。 到目前为止,这是我的代码: 关于为何不起作用的任何想法,或者更简单的方法?为了澄清,我想在奇数数组索引位置添加所有数字,所以。 编辑: 忘记提及我只想添加1、3、5、7、9、11,而不是13。 问题答案: 刚刚编辑了代码:

  • 求可被1到N的所有数整除的最小数,不留余数。由于数字可能非常大,我们取模100000007的答案。 我认为可以被从1到N的所有数字整除的最小数字是LCM(1... N)。 例如:对于N=5,最小值为60。 因为60是能被所有数字形式(1-5)整除的最小数。 但由于一些奇怪的原因,它给了我错误的答案大N(1000),等等。什么可以导致这里可能的错误,我在这里的登录正确吗? 这是我试图实现的。

  • 我正在研究弦和一个问题。问题陈述是“将字符串中的所有数字加一”。我没有得到输入数字129和9923所需的输出。有人能帮忙吗!

  • 我一直在努力解决Euler项目中的第5个问题,这就像 2520是可以被1到10中的每一个数字除以而没有任何余数的最小数字。 可以被1到20的所有数字整除的最小正数是多少? 我决定更进一步,我决定找到一个最小的正数,它可以被从1到limit的所有数字平均整除,limit是用户定义的。 当我执行程序时,问题开始出现,它立即打印出0。我试图追踪我的代码,但没有成功。