Showing posts with label sum of Integer numbers. Show all posts
Showing posts with label sum of Integer numbers. Show all posts

Monday, June 04, 2012

Program to calculate number of digits in an integer & sum of numbers of an integer

The following C++ program calculates the the number of digits in a given integer and the sum of all digits of an integer.



 #include <iostream>  
 #include <cmath>  
 using namespace std;  
 /*@author Bishal Acharya  
 The idea of summing the numbers in an integer is to take  
 a division of the number from ones to final units of the number  
 and then take a modulo against 10*/  
 class SumOfInteger {  
  int number;  
  public :  
  int getSummation(int);   
  int numberOfDigits(int);  
 };  
 /*Gets the number of digits in an integer. Have to make  
 sure that we dont calculate log value of 0 */  
 int SumOfInteger::numberOfDigits(int number){  
  int digits = 0;  
  digits = floor(log10(abs (number != 0 ? number :1))) +1;  
  return digits;  
 }  
 /*Returns the sum of numbers in an integer*/  
 int SumOfInteger::getSummation(int number){  
  int noOfDigits;  
  noOfDigits = numberOfDigits(number);  
  int sum =0;  
  int power =0;  
  for(int i=0; i< noOfDigits; i++){      
   power = pow(10,i);  
   sum = sum + (number / power) % 10;  
  }   
  return sum;  
 }  
 int main(){   
  int number = 0;  
  cout << "Enter the number :";  
  cin >> number;  
  int sum =0;  
  SumOfInteger sumObj;  
  sum = sumObj.getSummation(number);  
  cout << "The sum of the integer numbers :" << sum << endl;  
 }  

Output of the given program :-
Enter the number : 123
The sum of the integer numbers : 6

Alternative program to calculate number of digits in an number :-

 #include<iostream>  
 using namespace std;  
 int main(){  
  int number = 0;  
  cout << "Enter the number" << endl;  
  cin >> number;  
  int count;  
  while(number !=0){  
    number = number/10;  
    count++;  
  }  
  cout << "The number of digits in the number is :" << count;  
 }  

Program to reverse the digits in the given number. For eg :- if given number is 123 then the reversed value should be 321


 #include  
 using namespace std;  
 int main(){  
   int number = 0;  
   cout <<"enter the number :"<< endl;  
   cin >> number;  
   int reverse = 0;  
   while(number !=0){  
     reverse = reverse*10 + number%10;  
     number = number%10;  
   }  
 cout <<"The reversed number is :" << reverse;  
 }  

Benchmarks in Java program : Time it took to calculate number of digits in a number with log approach and with while loop approach.


 public static void main(String[] args) {  
           int number = 0;  
           int temp = 0;  
           Random rnd = new Random();  
           int range = 1;  
           while (range < 10) {  
                number = rnd.nextInt();  
                temp = number;  
                System.out.print("Number :" + number + "TimeWhile :");  
                // approach with while loop  
                int count = 0;  
                long now = System.nanoTime();  
                while (number != 0) {  
                     number = number / 10;  
                     count++;  
                }  
                System.out.print((System.nanoTime() - now) / 1000);  
                now = System.nanoTime();  
                double count1 = (Math.log10(Math.abs(temp) == 0 ? 1 : temp)) + 1;  
                System.out.print(": Timelogarithmic :" + (System.nanoTime() - now)  
                          / 1000);  
                System.out.println("");  
                range++;  
           }  
      }  

Output benchmark for 10 random numbers:-

 Number :279590619TimeWhile :2: Timelogarithmic :40  
 Number :878851661TimeWhile :1: Timelogarithmic :3  
 Number :1617859989TimeWhile :1: Timelogarithmic :3  
 Number :195513660TimeWhile :1: Timelogarithmic :7  
 Number :2024673675TimeWhile :1: Timelogarithmic :3  
 Number :478104225TimeWhile :1: Timelogarithmic :3  
 Number :417156389TimeWhile :1: Timelogarithmic :3  
 Number :-104604112TimeWhile :1: Timelogarithmic :3  
 Number :-516925116TimeWhile :3: Timelogarithmic :4  

The benchmark with Java program suggests that while loop approach of dividing the number by 10 each time gives a better response than using the inbuilt logarithmic and absolute functions.

See More :-
Game Of Pigs in C++
swapping two numbers without using the third one