プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

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

  1. 1からNまでのすべての素数を表示するJavaプログラム

    この記事では、Javaで1からNまでのすべての素数を表示する方法を理解します。 1から無限大までのすべての可能な正の数は自然数と呼ばれます。素数は、1とそれ自体が2つしかない特殊な数であり、他の数で割ることはできません。 唯一の因数が1である場合、その数は素数です。 11は素数です。その因数は1と11そのものです。素数の例としては、2、3、5、7、11、13などがあります。 2は唯一の偶数の素数です。他のすべての素数は奇数です。 以下は同じのデモンストレーションです- 入力 入力が-であると仮定します Enter the value of n :10 出力 必要な出力は-になり

  2. Python –数値から後部K桁を抽出

    数値から後部のK桁を抽出する必要がある場合は、単純なリスト内包表記、モジュロ演算子、および「**」演算子が使用されます。 以下は同じのデモンストレーションです- 例 my_list = [51645, 24567, 36743, 89452, 2122] print("The list is :") print(my_list) K = 3 print("The value of K is ") print(K) my_result = [element % (10 ** K) for element in my_list] print(&qu