Power digit sum

What is the sum of the digits of the number 2^N 

Example 1:

Input : n=100
Output: 115
Approach:

Java

import java.math.BigInteger;

public class PowerDigitSum {

    public static void main(String[] args) {
int val=100;
         BigInteger sum = powerSum(new 
            BigInteger(String.valueOf(val)));
         System.out.println(sum);
    }

    public static BigInteger powerSum(BigInteger val) {
        BigInteger power = power(new BigInteger("2"), val);
        BigInteger ten = new BigInteger("10");
        BigInteger sum = new BigInteger("0");
        while (power.signum() != 0) {
            sum = sum.add(power.mod(ten));
            power = power.divide(ten);
        }
        return sum;
    }

    static BigInteger power(BigInteger aBigInteger n) {
        // Base Case
        if (n.signum() == 0)
            return new BigInteger("1");
        BigInteger res = power(a, n.divide(a));
        if (n.mod(a).equals(new BigInteger("1")))
            return res.multiply(res).multiply(a);
        else
            return res.multiply(res);

    }

}


C++

#include <bits/stdc++.h>
using namespace std;

#define MAX 10000
//function to numtiply the cuurent
//and update the result array
//and find the new size of the 
//fatorial number
int multiply(int xint res[], int res_size)
{
    int carry = 0;
   //iterate till the end of size
    for (int i=0i<res_sizei++)
    {
        int p=res[i]*x+carry;
        res[i]=(res[i] * x + carry)%10;
        carry=p/10;   
    }
 
  //while carry>0 increment the size
  //and put the carry%10 into the res array
    while (carry)
    {
        res[res_size] = carry%10;
        carry = carry/10;
        res_size++;
    }

    //return the new size
    return res_size;
}

int bigPower(int xint n
{
  //base case
  //any number power 0 is 1
   if(n==0)
      return 1;
     int res[MAX];
     int res_size = 0;
     int temp = x;
    while (temp != 0
     {
       res[res_size] = temp % 10;
        temp = temp / 10;
        res_size++;
     }
   for (int i = 2i <= ni++)
       res_size = multiply(xresres_size);
    int sum=0;
  for (int i = res_size - 1i >= 0i--)
     sum+=res[i];
   return sum;
}
int main()
{
   
   int n=100;
  cout<<bigPower(2,n);
   cout<<"\n";
  return 0;



No comments:

Post a Comment