इस समस्या में, हमें रेंज 1 से n तक सभी संख्याओं के अंकों का योग ढूंढना है। उदाहरण के लिए 54 के अंकों का योग 5 + 4 = 9 है, इसी तरह, हमें सभी संख्याएं और उनके अंकों का योग ढूंढना है।
हम जानते हैं कि 10d - 1 संख्याएं उत्पन्न की जा सकती हैं, जिनके अंकों की संख्या d है। उन सभी d अंकों की संख्याओं का योग खोजने के लिए, हम एक पुनरावर्ती सूत्र का उपयोग कर सकते हैं।
sum(10d- 1)=sum(10d-1- 1)*10+45*(10d-1)
इनपुट और आउटपुट
इनपुट: यह एल्गोरिदम रेंज की ऊपरी सीमा लेता है, मान लें यह 20 है। आउटपुट: 1 से n तक सभी संख्याओं में अंकों का योग। यहाँ परिणाम 102 है
एल्गोरिदम
digitSumInRange(n)
इनपुट: रेंज की ऊपरी सीमा।
आउटपुट: रेंज (1-n) में सभी संख्याओं के लिए अंकों का योग।
शुरू यदि n < 10, तो वापस करें n(n+1)/2 digit := संख्या में अंकों की संख्या d := digit – 1 आकार digit का place सरणी परिभाषित करें place[0] := 0 place[1] := 45 i := 2 से d तक, करें 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) res वापस करें किया अंत
उदाहरण
#include<iostream> #include<cmath> using namespace std; int digitSumInRange(int n) { if (n<10) return n*(n+1)/2; //जब एक अंक की संख्या हो तो सूत्र से योग खोजें int digit = log10(n)+1; //संख्या में अंकों की संख्या int d = digit-1; //अंक गणना को 1 से घटाएं int *place = new int[d+1]; //1 से 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)); //10 की घात की गणना int msd = n/power; //सबसे महत्वपूर्ण अंक खोजें return msd*place[d] + (msd*(msd-1)/2)*power + msd*(1+n%power) + digitSumInRange(n%power); //पुनरावर्ती रूप से योग खोजें } 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