Write a program to accept 10 numbers. Print the product of numbers which are divisible by 11.
Answers
Answer:
22,33,11,44,55,66,77,88,99,110,
Explanation:
Input : n = 76945
Output : Yes
Input : n = 1234567589333892
Output : Yes
Input : n = 363588395960667043875487
Output : No
Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.
Since input number may be very large, we cannot use n % 11 to check if a number is divisible by 11 or not, especially in languages like C/C++. The idea is based on following fact.
A number is divisible by 11 if difference of following two is divisible by 11.
Sum of digits at odd places.
Sum of digits at even places.
Illustration:
For example, let us consider 76945
Sum of digits at odd places : 7 + 9 + 5
Sum of digits at even places : 6 + 4
Difference of two sums = 21 - 10 = 11
Since difference is divisible by 11, the
number 7945 is divisible by 11.
How does this work?
Let us consider 7694, we can write it as
7694 = 7*1000 + 6*100 + 9*10 + 4
The proof is based on below observation:
Remainder of 10i divided by 11 is 1 if i is even
Remainder of 10i divided by 11 is -1 if i is odd
So the powers of 10 only result in values either 1
or -1.
Remainder of "7*1000 + 6*100 + 9*10 + 4"
divided by 11 can be written as :
7*(-1) + 6*1 + 9*(-1) + 4*1
The above expression is basically difference
between sum of even digits and odd digits.
Below is implementation of above fact :
// C++ program to find if a number is divisible by
// 11 or not
#include<bits/stdc++.h>
using namespace std;
// Function to find that number divisible by 11 or not
int check(string str)
{
int n = str.length();
// Compute sum of even and odd digit
// sums
int oddDigSum = 0, evenDigSum = 0;
for (int i=0; i<n; i++)
{
// When i is even, position of digit is odd
if (i%2 == 0)
oddDigSum += (str[i]-'0');
else
evenDigSum += (str[i]-'0');
}
// Check its difference is divisible by 11 or not
return ((oddDigSum - evenDigSum) % 11 == 0);
}
// Driver code
int main()
{
string