Open In App

Sum of the digits of square of the given number which has only 1's as its digits

Last Updated : 16 Dec, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

Given a number represented as string str consisting of the digit 1 only i.e. 1, 11, 111, .... The task is to find the sum of digits of the square of the given number.

Examples: 

Input: str = 11 
Output:
112 = 121 
1 + 2 + 1 = 4

Input: str = 1111 
Output: 16 
 

Naive approach: Find the square of the given number and then find the sum of its digits.

Below is the implementation of the above approach:  

C++
// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;

// Function to return the sum 
// of the digits of num ^ 2
int squareDigitSum(string number)
{
    int summ = 0;
    int num = stoi(number);
    
    // Store the square of num
    int squareNum = num * num;

    // Find the sum of its digits
    while(squareNum > 0)
    {
        summ = summ + (squareNum % 10);
        squareNum = squareNum / 10;
    }
    return summ;
} 

// Driver code
int main()
{
    string N = "1111";

    cout << squareDigitSum(N);

    return 0;
}

// This code is contributed by Princi Singh
Java
// Java implementation of the approach 
// Java implementation of the approach
import java.io.*;
class GFG 
{

// Function to return the sum 
// of the digits of num ^ 2
static int squareDigitSum(String number)
{
    int summ = 0;
    int num = Integer.parseInt(number);
    
    // Store the square of num
    int squareNum = num * num;

    // Find the sum of its digits
    while(squareNum > 0)
    {
        summ = summ + (squareNum % 10);
        squareNum = squareNum / 10;
    }
    return summ;
} 

// Driver code 
public static void main (String[] args)
{ 
    String N = "1111"; 

    System.out.println(squareDigitSum(N)); 
} 
}

// This code is contributed by Rajput-Ji
Python3
# Python3 implementation of the approach

# Function to return the sum 
# of the digits of num ^ 2
def squareDigitSum(num):

    summ = 0
    num = int(num)
    
    # Store the square of num
    squareNum = num * num

    # Find the sum of its digits
    while squareNum > 0:
        summ = summ + (squareNum % 10)
        squareNum = squareNum//10

    return summ
    
# Driver code
if __name__ == "__main__":

    N = "1111"
    print(squareDigitSum(N))
C#
// C# implementation of the approach 
using System;

class GFG 
{
    
    // Function to return the sum 
    // of the digits of num ^ 2
    static int squareDigitSum(String number)
    {
        int summ = 0;
        int num = int.Parse(number);

        // Store the square of num
        int squareNum = num * num;

        // Find the sum of its digits
        while(squareNum > 0)
        {
            summ = summ + (squareNum % 10);
            squareNum = squareNum / 10;
        }
        return summ;
    } 
    
    // Driver code 
    public static void Main (String[] args)
    { 
        String s = "1111"; 
    
        Console.WriteLine(squareDigitSum(s)); 
    } 
}

// This code is contributed by Princi Singh
JavaScript
<script>

// Javascript implementation of the approach

// Function to return the sum
// of the digits of num ^ 2
function squareDigitSum(number)
{
    var summ = 0;
    var num = parseInt(number);

    // Store the square of num
    var squareNum = num * num;

    // Find the sum of its digits
    while (squareNum > 0) 
    {
        summ = summ + (squareNum % 10);
        squareNum = parseInt(squareNum / 10);
    }
    return summ;
}

// Driver code
var N = "1111";

document.write(squareDigitSum(N));

// This code is contributed by todaysgaurav 

</script>

Output: 
16

 

Time complexity: O(log10n), where n is no of digits in the given number
Auxiliary Space: O(1)

Efficient approach: It can be observed that in the square of the given number, the sequence [1, 2, 3, 4, 5, 6, 7, 9, 0] repeats in the left part and the sequence [0, 9, 8, 7, 6, 5, 4, 3, 2, 1] repeats in the right part. Both of these sequences appear floor(length(str) / 9) times and the sum of both of these sequences is 81 and the square of the number adds an extra 1 in the end.
So, the sum of all these would be [floor(length(str) / 9)] * 81 + 1.
And the middle digits have a sequence such as if length(str) % 9 = a then middle sequence is [1, 2, 3....a, a - 1, a - 2, ... 2]. Now, it can be observed that sum of this part [1, 2, 3....a] is equal to (a * (a + 1)) / 2 and sum of the other part [a - 1, a - 2, ... 2] is ((a * (a - 1)) / 2) - 1
Total sum = floor(length(str) / 9) * 81 + 1 + (length(str) % 9)2 - 1 = floor(length(str) / 9) * 81 + (length(str) % 9)2.

Below is the implementation of the above approach: 

C++
// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;

#define lli long long int

// Function to return the sum
// of the digits of num^2
lli squareDigitSum(string s)
{
    // To store the number of 1's
    lli lengthN = s.length();

    // Find the sum of the digits of num^2
    lli result = (lengthN / 9) * 81
                 + pow((lengthN % 9), 2);

    return result;
}

// Driver code
int main()
{
    string s = "1111";

    cout << squareDigitSum(s);

    return 0;
}
Java
// Java implementation of the approach 
import java.io.*;
class GFG 
{
    
    // Function to return the sum 
    // of the digits of num^2 
    static long squareDigitSum(String s) 
    { 
        // To store the number of 1's 
        long lengthN = s.length(); 
    
        // Find the sum of the digits of num^2 
        long result = (lengthN / 9) * 81 + 
                      (long)Math.pow((lengthN % 9), 2); 
    
        return result; 
    } 
    
    // Driver code 
    public static void main (String[] args)
    { 
        String s = "1111"; 
    
        System.out.println(squareDigitSum(s)); 

    } 
}

// This code is contributed by AnkitRai01
Python3
# Python3 implementation of the approach

# Function to return the sum 
# of the digits of num ^ 2
def squareDigitSum(num):

    # To store the number of 1's
    lengthN = len(num)

    # Find the sum of the digits of num ^ 2
    result = (lengthN//9)*81 + (lengthN % 9)**2

    return result

# Driver code
if __name__ == "__main__" :

    N = "1111"
    print(squareDigitSum(N))
C#
// C# implementation of the approach 
using System;
                    
class GFG 
{
    
// Function to return the sum 
// of the digits of num^2 
static long squareDigitSum(String s) 
{ 
    // To store the number of 1's 
    long lengthN = s.Length; 

    // Find the sum of the digits of num^2 
    long result = (lengthN / 9) * 81 + 
                  (long)Math.Pow((lengthN % 9), 2); 

    return result; 
} 

// Driver code 
public static void Main (String[] args)
{ 
    String s = "1111"; 

    Console.WriteLine(squareDigitSum(s)); 
}
}

// This code is contributed by 29AjayKumar
JavaScript
<script>

// Javascript implementation of the approach

// Function to return the sum
// of the digits of num^2
function squareDigitSum(s)
{
    // To store the number of 1's
    let lengthN = s.length;

    // Find the sum of the digits of num^2
    let result = parseInt(lengthN / 9) * 81
                 + Math.pow((lengthN % 9), 2);

    return result;
}

// Driver code
    let s = "1111";

    document.write(squareDigitSum(s));

</script>

Output: 
16

 

Time Complexity O(1)
Auxiliary Space: O(1)
 


Next Article

Similar Reads