Please check the following program and find where is it going wrong. I matched the result from online factorial calculators and it is correct.

``````#include<iostream>
using namespace std;

double fact(int n)
{
double value=1.0;

if(n==0)
return(value);
else
{
value=n*fact(n-1);
return(value);
}}

int main()
{
int t,n[100];
cin>>t;
double result;
if(t<=100&&t>=1)
{
for(int i=0;i<t;i++)
{
cin>>n[i];
}}
cout<<endl;
for(int i=0;i<t;i++)
{
result=0.0;
if(n[i]>=1&&n[i]<=100)
{
result=fact(n[i]);
cout<<result<<endl;
}
}
return 0;
}``````

You have to return exact value of `n!` not some rounded double…

``````1
11
``````

and output have to be

``````39916800
``````

``````3.99168e+07
``````

see the values here - http://2000clicks.com/MathHelp/BasicFactorialTable.aspx

1 Like

Ohh. I see the problem now. My prog prints scientific form of the output. How can I get these output in exact value, since there isn’t any datatype in C++ that can store such long numbers?

In C++ you have to implement your own - represent long number as char array and implement multiply operation like:

`````` 1234
x 56
-----
7404
6170
=====
69104
``````

in implementation it is easier to use int array and perform modulo 10 operation just once - at the end

``````    [1][ 2][ 3][ 4]
x         [ 5][ 6]
-------------------
[ 6][12][18][24]
[5][10][15][20]
===================
[5][16][27][38][24]
~~~~~~~~~~~~~~~~~~~
6   9   1   0   4``````

Sorry, but I am a beginner. Couldn’t understand what you mean. I understand that I should store each separate digit in successive elements of an integer array. But again I am stuck, how can I do this?

//