इस समस्या में, हमें 1 से n तक की सभी संख्याओं के अंकों का योग ज्ञात करना होता है। उदाहरण के लिए 54 के अंकों का योग 5 + 4 =9 होता है, इस प्रकार हमें सभी संख्याओं और उनके अंकों का योग ज्ञात करना होता है।
हम जानते हैं कि 10 d - 1 . हैं संख्याएँ उत्पन्न की जा सकती हैं, जिनके अंकों की संख्या d है। d अंकों की उन सभी संख्याओं का योग ज्ञात करने के लिए, हम एक पुनरावर्ती सूत्र का उपयोग कर सकते हैं।
योग(10 d - 1)=योग(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-एन) में सभी संख्याओं के अंकों का योग।
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