समस्या विवरण
एक सरणी arr[n] दी गई है, इसके सभी तत्वों का गुणनफल ज्ञात करें।
उदाहरण
| सरणी | गुणनफल | गणना |
| {10, 20, 3, 4, 8} | 19200 | 10×20×3×4×8 |
| {1, 2, 3, 4, 3, 2, 1} | 144 | 1×2×3×4×3×2×1 |
| {5, 0, 10} | 0 | शून्य से गुणनफल = 0 |
एल्गोरिदम
result = 1 आरंभ करें
- प्रत्येक तत्व के लिए:
result *= arr[i]
result लौटाएं
C प्रोग्राम
#include <stdio.h>
long long product_array(int arr[], int n) {
long long result = 1;
for (int i = 0; i < n; i++) {
result *= arr[i];
}
return result;
}
int main() {
int arr[] = {10, 20, 3, 4, 8};
int n = sizeof(arr) / sizeof(arr[0]);
printf("सरणी: ");
for (int i = 0; i < n; i++) printf("%d ", arr[i]);
printf("\n");
printf("गुणनफल: %lld\n", product_array(arr, n));
return 0;
}
आउटपुट
सरणी: 10 20 3 4 8
गुणनफल: 19200
महत्वपूर्ण विचार
| मुद्दा | समाधान |
| पूर्णांक ओवरफ्लो | long long (64-बिट) या double का उपयोग करें |
| शून्य तत्व | गुणनफल 0 हो जाता है, जल्दी ब्रेक कर सकते हैं |
| ऋणात्मक संख्याएं | सही काम करता है, चिह्न ट्रैक करता है |
| खाली सरणी | 1 लौटाएं (गुणनफल पहचान) |
अनुकूलित संस्करण (जल्दी समाप्ति)
long long product_optimized(int arr[], int n) {
long long result = 1;
for (int i = 0; i < n; i++) {
if (arr[i] == 0) return 0; // जल्दी बाहर निकलें
result *= arr[i];
}
return result;
}
फ्लोटिंग पॉइंट सरणी के लिए
double product_double(double arr[], int n) {
double result = 1.0;
for (int i = 0; i < n; i++)
result *= arr[i];
return result;
}
लघुगणक दृष्टिकोण (बहुत बड़ी संख्याओं के लिए)
#include <math.h>
double log_product(int arr[], int n) {
double sum_log = 0;
for (int i = 0; i < n; i++) {
if (arr[i] <= 0) return NAN; // लॉग केवल धनात्मक के लिए
sum_log += log(arr[i]);
}
return exp(sum_log); // वास्तविक गुणनफल (ओवरफ्लो हो सकता है)
}
// या केवल लॉग योग लौटाएं
double log_sum(int arr[], int n) {
double sum = 0;
for (int i = 0; i < n; i++)
if (arr[i] > 0) sum += log(arr[i]);
return sum; // ln(गुणनफल)
}