My code is working fine with my custom input but on submission it shows wrong

#include <iostream>
using namespace std;
double fact(int n){
    if(n<=100 && n>=1){
    double factorial = 1;
    for (int i = 2; i<=n; i++)
    {
        factorial*=i;
    }
    return factorial;
    }
    else
    {
        return 0;
    }
}
int main() {
	int n,current;
	cin>>n;
	double arr[n];
	if(n<=100 && n>=1){
	for(int i = 0; i < n; i++){
	    cin>>arr[i];
	}
	}
	else
	{
	    return 0;
	}
	for(int i = 0; i < n; i++){
	    current  = arr[i];
	    cout<<fact(current)<<endl;
	    }
	return 0;
}

This should explain the problem:

You can also check this tutorial:

1 Like

I know that a long long int data type’s variable can not store the value of 100!. That’s why I am using double data type. You can check it manually that the code works fine with my input 100

How is 100! viz.,

93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

Equal to 9.33262e+157 ?

1 Like

Please try to search on google to find out the value of 100!. Then you will understand the value you gave & mine are both equal.

LMAO, how can 100! end with a digit other than 0?

Edit: Your submission will only be accepted if you print the expected answer (Not in Scientific Notation).

For N = 100, your code must output

93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

not 9.33262e+157

1 Like

If the number is like this → 1.524157875019e+16

This doesn’t mean that the number is ending with 16. It means there are total 16 digits after the decimal point.

It means : 1.524157875019e+16 = 15,241,578,750,190,000
Similarly : 8.10000007371e-9 = 0.00000000810000007371

­• + denotes positive power of 10 and - denotes negative power of 10.

Hence, 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

and 9.33262e+157 , both are same.

You doubted Google’s Calculator :joy:

1 Like

Okay, my perception of e + K in Scientific Notation was wrong. But this is not true.

Scientific notation is meant to represent large numbers (to show how big they are) in a more convenient way. Which means, 9.33262e + 157 is an approximation of 100!, whereas

93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000 is the true value.

PS: Note that For your Submission to get accepted, you should print the true value, not an approximation.

3 Likes

I think this is the problem with this particular question. Because later I found a question exactly same with this. I applied the same code there & get the correct answer.
Here is the question link.
And here is the solution treated as correct answer.

FLOW018

   for(int i=0; i<t; i++){  // t --> test cases
	    int n;
	    cin>>n;
	    int fact=1;
	    
	    while(n!=0){
	        fact*=n;
	        n--;
	    }
	    cout<<fact<<endl;
	    
	}
//when 'fact' is declared as 'int',  for n= 15, OUTPUT:  2004310016 (10 digits)

//when I declare 'fact' as 'double', OUTPUT:  1.30767e+12  (13 digits)

//Both these solutions are getting accepted.
1 Like

Exactly this question has no issue with the code. :smiley: :grin: