Find the average of k digits from the beginning and l digits from the end of the given number
Given three integers N, K and L. The task is to find the average of the first K digits and the last L digits of the given number N without any digit overlapping.
Examples:
Input: N = 123456, K = 2, L = 3
Output: 3.0
Sum of first K digits will be 1 + 2 = 3
Sum of last L digits will be 4 + 5 + 6 = 15
Average = (3 + 15) / (2 + 3) = 18 / 5 = 3
Input: N = 456966, K = 1, L = 1
Output: 5.0
Approach: If the count of digits in n is less than (K + L) then it isn’t possible to find the average without digits overlapping and print -1 in that case. If that’s not the case, find the sum of the last L digits of N and store it in a variable say sum1 then find the sum of the first K digits of N and store it in sum2. Now, print the average as (sum1 + sum2) / (K + L).
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int countDigits( int num)
{
int cnt = 0;
while (num > 0)
{
cnt++;
num /= 10;
}
return cnt;
}
int sumFromStart( int num, int n, int rem)
{
num /= (( int ) pow (10, rem));
int sum = 0;
while (num > 0)
{
sum += (num % 10);
num /= 10;
}
return sum;
}
int sumFromEnd( int num, int n)
{
int sum = 0;
for ( int i = 0; i < n; i++)
{
sum += (num % 10);
num /= 10;
}
return sum;
}
float getAverage( int n, int k, int l)
{
int totalDigits = countDigits(n);
if (totalDigits < (k + l))
return -1;
int sum1 = sumFromEnd(n, l);
int sum2 = sumFromStart(n, k, totalDigits - k);
return (( float )(sum1 + sum2) /
( float )(k + l));
}
int main()
{
int n = 123456, k = 2, l = 3;
cout << getAverage(n, k, l);
return 0;
}
|
Java
class GFG {
public static int countDigits( int num)
{
int cnt = 0 ;
while (num > 0 ) {
cnt++;
num /= 10 ;
}
return cnt;
}
public static int sumFromStart( int num, int n, int rem)
{
num /= (( int )Math.pow( 10 , rem));
int sum = 0 ;
while (num > 0 ) {
sum += (num % 10 );
num /= 10 ;
}
return sum;
}
public static int sumFromEnd( int num, int n)
{
int sum = 0 ;
for ( int i = 0 ; i < n; i++) {
sum += (num % 10 );
num /= 10 ;
}
return sum;
}
public static float getAverage( int n, int k, int l)
{
int totalDigits = countDigits(n);
if (totalDigits < (k + l))
return - 1 ;
int sum1 = sumFromEnd(n, l);
int sum2 = sumFromStart(n, k, totalDigits - k);
return (( float )(sum1 + sum2) / ( float )(k + l));
}
public static void main(String args[])
{
int n = 123456 , k = 2 , l = 3 ;
System.out.print(getAverage(n, k, l));
}
}
|
Python3
from math import pow
def countDigits(num):
cnt = 0
while (num > 0 ):
cnt + = 1
num / / = 10
return cnt
def sumFromStart(num, n, rem):
num / / = pow ( 10 , rem)
sum = 0
while (num > 0 ):
sum + = (num % 10 )
num / / = 10
return sum
def sumFromEnd(num, n):
sum = 0
for i in range (n):
sum + = (num % 10 )
num / / = 10
return sum
def getAverage(n, k, l):
totalDigits = countDigits(n)
if (totalDigits < (k + l)):
return - 1
sum1 = sumFromEnd(n, l)
sum2 = sumFromStart(n, k, totalDigits - k)
return (sum1 + sum2) / (k + l)
if __name__ = = '__main__' :
n = 123456
k = 2
l = 3
print (getAverage(n, k, l))
|
C#
using System;
class GFG
{
public static int countDigits( int num)
{
int cnt = 0;
while (num > 0)
{
cnt++;
num /= 10;
}
return cnt;
}
public static int sumFromStart( int num,
int n, int rem)
{
num /= (( int )Math.Pow(10, rem));
int sum = 0;
while (num > 0)
{
sum += (num % 10);
num /= 10;
}
return sum;
}
public static int sumFromEnd( int num, int n)
{
int sum = 0;
for ( int i = 0; i < n; i++)
{
sum += (num % 10);
num /= 10;
}
return sum;
}
public static float getAverage( int n, int k, int l)
{
int totalDigits = countDigits(n);
if (totalDigits < (k + l))
return -1;
int sum1 = sumFromEnd(n, l);
int sum2 = sumFromStart(n, k, totalDigits - k);
return (( float )(sum1 + sum2) /
( float )(k + l));
}
public static void Main(String []args)
{
int n = 123456, k = 2, l = 3;
Console.WriteLine(getAverage(n, k, l));
}
}
|
Javascript
<script>
function countDigits(num)
{
var cnt = 0;
while (num > 0)
{
cnt++;
num = parseInt(num/10);
}
return cnt;
}
function sumFromStart(num, n, rem)
{
num = (parseInt( num/Math.pow(10, rem)));
var sum = 0;
while (num > 0)
{
sum += (num % 10);
num = parseInt(num/10);
}
return sum;
}
function sumFromEnd(num , n)
{
var sum = 0;
for (i = 0; i < n; i++)
{
sum += (num % 10);
num = parseInt(num/10);
}
return sum;
}
function getAverage(n , k , l) {
var totalDigits = countDigits(n);
if (totalDigits < (k + l))
return -1;
var sum1 = sumFromEnd(n, l);
var sum2 = sumFromStart(n, k, totalDigits - k);
return ( (sum1 + sum2) / (k + l));
}
var n = 123456, k = 2, l = 3;
document.write(getAverage(n, k, l));
</script>
|
Using string slicing and sum() function:
Approach:
This approach involves converting the given number into a string and then using string slicing to extract the required digits. The sum() function is used to calculate the sum of the extracted digits, and the average is calculated by dividing the sum by the total number of digits.
Convert the given number N to a string.
Take the first K digits of the string (from the beginning) and the last L digits of the string (from the end).
Concatenate the first K digits and the last L digits into a single string.
Convert the concatenated string of digits to a list of integers.
Calculate the sum of the integers in the list.
Calculate the average of the sum of digits from step 5 and divide by the sum of K and L.
Return the average as the result.
C++
#include <iostream>
#include <string>
using namespace std;
double average_of_digits_1( int N, int K, int L) {
string digits = to_string(N);
string first_k = digits.substr(0, K);
string last_l = digits.substr(digits.size()-L);
int sum_of_digits = 0;
for ( char c : first_k + last_l) {
sum_of_digits += (c - '0' );
}
double average = static_cast < double >(sum_of_digits) / (K + L);
return average;
}
int main() {
int N = 123456;
int K = 2;
int L = 3;
cout << "Input: N = " << N << " K = " << K << " L = " << L << endl;
cout << "Output: " << average_of_digits_1(N, K, L) << endl;
N = 456966;
K = 1;
L = 1;
cout << "Input: N = " << N << " K = " << K << " L = " << L << endl;
cout << "Output: " << average_of_digits_1(N, K, L) << endl;
return 0;
}
|
Java
public class AverageOfDigits {
public static double averageOfDigits( int N, int K, int L) {
String digits = String.valueOf(N);
String firstK = digits.substring( 0 , K);
String lastL = digits.substring(digits.length() - L);
int sumOfDigits = 0 ;
for ( char c : (firstK + lastL).toCharArray()) {
sumOfDigits += (c - '0' );
}
double average = ( double ) sumOfDigits / (K + L);
return average;
}
public static void main(String[] args) {
int N = 123456 ;
int K = 2 ;
int L = 3 ;
System.out.println( "Input: N = " + N + " K = " + K + " L = " + L);
System.out.println( "Output: " + averageOfDigits(N, K, L));
N = 456966 ;
K = 1 ;
L = 1 ;
System.out.println( "Input: N = " + N + " K = " + K + " L = " + L);
System.out.println( "Output: " + averageOfDigits(N, K, L));
}
}
|
Python3
def average_of_digits_1(N, K, L):
digits = str (N)
first_k = digits[:K]
last_l = digits[ - L:]
sum_of_digits = sum ( map ( int , first_k + last_l))
average = sum_of_digits / (K + L)
return average
N = 123456
K = 2
L = 3
print ( "Input: N =" , N, "K =" , K, "L =" , L)
print ( "Output:" , average_of_digits_1(N, K, L))
N = 456966
K = 1
L = 1
print ( "Input: N =" , N, "K =" , K, "L =" , L)
print ( "Output:" , average_of_digits_1(N, K, L))
|
C#
using System;
class Program {
static double AverageOfDigits( int N, int K, int L)
{
string digits = N.ToString();
string firstK = digits.Substring(0, K);
string lastL = digits.Substring(digits.Length - L);
int sumOfDigits = 0;
foreach ( char c in firstK + lastL)
{
sumOfDigits
+= (c
- '0' );
}
double average = ( double )sumOfDigits / (K + L);
return average;
}
static void Main( string [] args)
{
int N = 123456;
int K = 2;
int L = 3;
Console.WriteLine( "Input: N = " + N + " K = " + K
+ " L = " + L);
Console.WriteLine( "Output: "
+ AverageOfDigits(N, K, L));
N = 456966;
K = 1;
L = 1;
Console.WriteLine( "Input: N = " + N + " K = " + K
+ " L = " + L);
Console.WriteLine( "Output: "
+ AverageOfDigits(N, K, L));
}
}
|
Javascript
function averageOfDigits(N, K, L) {
const digits = N.toString();
const firstK = digits.slice(0, K);
const lastL = digits.slice(-L);
let sumOfDigits = 0;
for (let i = 0; i < firstK.length; i++) {
sumOfDigits += parseInt(firstK[i]);
}
for (let i = 0; i < lastL.length; i++) {
sumOfDigits += parseInt(lastL[i]);
}
const average = sumOfDigits / (K + L);
return average;
}
let N = 123456;
let K = 2;
let L = 3;
console.log( "Input: N =" , N, "K =" , K, "L =" , L);
console.log( "Output:" , averageOfDigits(N, K, L));
N = 456966;
K = 1;
L = 1;
console.log( "Input: N =" , N, "K =" , K, "L =" , L);
console.log( "Output:" , averageOfDigits(N, K, L));
|
Output
Input: N = 123456 K = 2 L = 3
Output: 3.6
Input: N = 456966 K = 1 L = 1
Output: 5.0
Time complexity: O(K+L)
Auxiliary Space: O(K+L)
Last Updated :
12 Nov, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...