# CHALLENGING C PROGRAM...-atleast for me



## vinit suri (Oct 10, 2007)

hey guys i needed ur help wid a c program.....

cud sm1 plzz post dis program 4 me...plzzzzz
 d program is that....

it should accept any number between one and thousand and find the first non zero digit of the factorial of dat number from the right hand side.....


plz plz plz help me...

example:



enter a number :  5
The first non digit number from the right in its factorial is : 2










                                                                                __________________


----------



## harryneopotter (Oct 10, 2007)

srry ... i didnt understand wat u trying to say ... plz explain with any example ..


----------



## arunks (Oct 10, 2007)

main()
{
long int a,fact;
scanf("%ld",&a);

fact=1;
for(int i=a;i>0;i--)
{
fact=fact*a;
}
while(fact>0)
{
fact=fact%10;
if(fact!=0)
{
printf("found");
exit();
}
else
{fact=fact/10;
}
getch();
}

i have made it in very little tiem so correct the little mistakes....just check the logic


----------



## aditya.shevade (Oct 10, 2007)

^^ What he means is. Factorial of 5 is 120. So rightmost digit (LSB) is 0. After that is 2. So, the first non zero digit from right is the second one and that is two.

How to calculate this for factorials of 0 up to 1000.

As I pointed out in the C/C++ thread, it can be done, but might get messy.

I will try once my exams are over on Saturday.


----------



## harryneopotter (Oct 11, 2007)

@ arunks, i think ur logic is nt right ... check it again .......


i think its easy .........
 i will not give u exact coding .... but little hints so that u can make it urself .......

1. first ask fr the desired no(take input)
2. Check if it is in the range (1-1000) , if yes then go to step 3 or goto step 1 again ..
3. Calculate Factorial 
4. now logic 

     count =0;
   rem=0;
  while (rem==0)
{
rem=fact%10;

fact=fact/10;

count++;
}
cout<<"The first non zero digit from right side is "<<rem;

cout<<"\n And the Position is "<<count;


here rem is remainder and count is a counter to knw the position of the non zero digit. 

example 

if the factorial is 120 
then wen while loop starts 
count=0, rem=0 (by default)
rem = 120%10 = 0
fact=120/10=12
count++
nw as rem is stil 0, 
next pass
count =1, rem =0
rem=12%10 = 2
fact= 12/10 =1
count++ (count = 2 now)
nw rem is nt 0 .. so it will exit from loop 
and we have 
rem =2 (first non zero digit from right )
count = 2 ( position of first non zero digit ) 





hope it works ..as i am nt feeling right nw to open TC .........


----------



## aditya.shevade (Oct 11, 2007)

^^ Then use devCPP


----------



## harryneopotter (Oct 11, 2007)

^ dear ... i dnt have Devcpp Installed on my system... and i was being lazy to type whole prog in TC .. tht y i said that...


----------



## vinit suri (Oct 11, 2007)

hey harryneopotter thanks for the reply but my problem was not with findin the first non digit number from the right...thats pretty easy using mod function.....but if u notice the actual problem over here is with finding out the factorial ....there s no such datatype which can hlold 1000 factorial without getting overloaded....so cud u plzzz tell me how 2 do the program now...


----------



## harryneopotter (Oct 11, 2007)

402,387,260,077,093,773,543,702,433,923,003,985,719,374,864, 210,714,632,543,799,910,429,938,512,398,629,020,592,044,208, 486,969,404,800,479,988,610,197,196,058,631,666,872,994,808, 558,901,323,829,669,944,590,997,424,504,087,073,759,918,823, 627,727,188,732,519,779,505,950,995,276,120,874,975,462,497, 043,601,418,278,094,646,496,291,056,393,887,437,886,487,337, 119,181,045,825,783,647,849,977,012,476,632,889,835,955,735, 432,513,185,323,958,463,075,557,409,114,262,417,474,349,347, 553,428,646,576,611,667,797,396,668,820,291,207,379,143,853, 719,588,249,808,126,867,838,374,559,731,746,136,085,379,534, 524,221,586,593,201,928,090,878,297,308,431,392,844,403,281, 231,558,611,036,976,801,357,304,216,168,747,609,675,871,348, 312,025,478,589,320,767,169,132,448,426,236,131,412,508,780, 208,000,261,683,151,027,341,827,977,704,784,635,868,170,164, 365,024,153,691,398,281,264,810,213,092,761,244,896,359,928, 705,114,964,975,419,909,342,221,566,832,572,080,821,333,186, 116,811,553,615,836,546,984,046,708,975,602,900,950,537,616, 475,847,728,421,889,679,646,244,945,160,765,353,408,198,901, 385,442,487,984,959,953,319,101,723,355,556,602,139,450,399, 736,280,750,137,837,615,307,127,761,926,849,034,352,625,200, 015,888,535,147,331,611,702,103,968,175,921,510,907,788,019, 393,178,114,194,545,257,223,865,541,461,062,892,187,960,223, 838,971,476,088,506,276,862,967,146,674,697,562,911,234,082, 439,208,160,153,780,889,893,964,518,263,243,671,616,762,179, 168,909,779,911,903,754,031,274,622,289,988,005,195,444,414, 282,012,187,361,745,992,642,956,581,746,628,302,955,570,299, 024,324,153,181,617,210,465,832,036,786,906,117,260,158,783, 520,751,516,284,225,540,265,170,483,304,226,143,974,286,933, 061,690,897,968,482,590,125,458,327,168,226,458,066,526,769, 958,652,682,272,807,075,781,391,858,178,889,652,208,164,348, 344,825,993,266,043,367,660,176,999,612,831,860,788,386,150, 279,465,955,131,156,552,036,093,988,180,612,138,558,600,301, 435,694,527,224,206,344,631,797,460,594,682,573,103,790,084, 024,432,438,465,657,245,014,402,821,885,252,470,935,190,620, 929,023,136,493,273,497,565,513,958,720,559,654,228,749,774, 011,413,346,962,715,422,845,862,377,387,538,230,483,865,688, 976,461,927,383,814,900,140,767,310,446,640,259,899,490,222, 221,765,904,339,901,886,018,566,526,485,061,799,702,356,193, 897,017,860,040,811,889,729,918,311,021,171,229,845,901,641, 921,068,884,387,121,855,646,124,960,798,722,908,519,296,819, 372,388,642,614,839,657,382,291,123,125,024,186,649,353,143, 970,137,428,531,926,649,875,337,218,940,694,281,434,118,520, 158,014,123,344,828,015,051,399,694,290,153,483,077,644,569, 099,073,152,433,278,288,269,864,602,789,864,321,139,083,506, 217,095,002,597,389,863,554,277,196,742,822,248,757,586,765, 752,344,220,207,573,630,569,498,825,087,968,928,162,753,848, 863,396,909,959,826,280,956,121,450,994,871,701,244,516,461, 260,379,029,309,120,889,086,942,028,510,640,182,154,399,457, 156,805,941,872,748,998,094,254,742,173,582,401,063,677,404, 595,741,785,160,829,230,135,358,081,840,096,996,372,524,230, 560,855,903,700,624,271,243,416,909,004,153,690,105,933,983, 835,777,939,410,970,027,753,472,000,000,000,000,000,000,000, 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000, 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000, 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000, 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000, 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000, 000



it is the factorial of 1000....... and i dnt think any data int data type in c++ can handle it. 

 But may be u can use a char Pointer. but thn it will be an herculeaon task to calculate the first non zero digit ..... give it some time ......i will try again .. this time more seriously.


----------



## Garbage (Oct 11, 2007)

harryneopotter said:
			
		

> 402,387,260,077,093,773,543,702,433,923,003,985,719,374,864, 210,714,632,543,799,910,429,938,512,398,629,020,592,044,208, 486,969,404,800,479,988,610,197,196,058,631,666,872,994,808, 558,901,323,829,669,944,590,997,424,504,087,073,759,918,823, 627,727,188,732,519,779,505,950,995,276,120,874,975,462,497, 043,601,418,278,094,646,496,291,056,393,887,437,886,487,337, 119,181,045,825,783,647,849,977,012,476,632,889,835,955,735, 432,513,185,323,958,463,075,557,409,114,262,417,474,349,347, 553,428,646,576,611,667,797,396,668,820,291,207,379,143,853, 719,588,249,808,126,867,838,374,559,731,746,136,085,379,534, 524,221,586,593,201,928,090,878,297,308,431,392,844,403,281, 231,558,611,036,976,801,357,304,216,168,747,609,675,871,348, 312,025,478,589,320,767,169,132,448,426,236,131,412,508,780, 208,000,261,683,151,027,341,827,977,704,784,635,868,170,164, 365,024,153,691,398,281,264,810,213,092,761,244,896,359,928, 705,114,964,975,419,909,342,221,566,832,572,080,821,333,186, 116,811,553,615,836,546,984,046,708,975,602,900,950,537,616, 475,847,728,421,889,679,646,244,945,160,765,353,408,198,901, 385,442,487,984,959,953,319,101,723,355,556,602,139,450,399, 736,280,750,137,837,615,307,127,761,926,849,034,352,625,200, 015,888,535,147,331,611,702,103,968,175,921,510,907,788,019, 393,178,114,194,545,257,223,865,541,461,062,892,187,960,223, 838,971,476,088,506,276,862,967,146,674,697,562,911,234,082, 439,208,160,153,780,889,893,964,518,263,243,671,616,762,179, 168,909,779,911,903,754,031,274,622,289,988,005,195,444,414, 282,012,187,361,745,992,642,956,581,746,628,302,955,570,299, 024,324,153,181,617,210,465,832,036,786,906,117,260,158,783, 520,751,516,284,225,540,265,170,483,304,226,143,974,286,933, 061,690,897,968,482,590,125,458,327,168,226,458,066,526,769, 958,652,682,272,807,075,781,391,858,178,889,652,208,164,348, 344,825,993,266,043,367,660,176,999,612,831,860,788,386,150, 279,465,955,131,156,552,036,093,988,180,612,138,558,600,301, 435,694,527,224,206,344,631,797,460,594,682,573,103,790,084, 024,432,438,465,657,245,014,402,821,885,252,470,935,190,620, 929,023,136,493,273,497,565,513,958,720,559,654,228,749,774, 011,413,346,962,715,422,845,862,377,387,538,230,483,865,688, 976,461,927,383,814,900,140,767,310,446,640,259,899,490,222, 221,765,904,339,901,886,018,566,526,485,061,799,702,356,193, 897,017,860,040,811,889,729,918,311,021,171,229,845,901,641, 921,068,884,387,121,855,646,124,960,798,722,908,519,296,819, 372,388,642,614,839,657,382,291,123,125,024,186,649,353,143, 970,137,428,531,926,649,875,337,218,940,694,281,434,118,520, 158,014,123,344,828,015,051,399,694,290,153,483,077,644,569, 099,073,152,433,278,288,269,864,602,789,864,321,139,083,506, 217,095,002,597,389,863,554,277,196,742,822,248,757,586,765, 752,344,220,207,573,630,569,498,825,087,968,928,162,753,848, 863,396,909,959,826,280,956,121,450,994,871,701,244,516,461, 260,379,029,309,120,889,086,942,028,510,640,182,154,399,457, 156,805,941,872,748,998,094,254,742,173,582,401,063,677,404, 595,741,785,160,829,230,135,358,081,840,096,996,372,524,230, 560,855,903,700,624,271,243,416,909,004,153,690,105,933,983, 835,777,939,410,970,027,753,472,000,000,000,000,000,000,000, 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000, 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000, 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000, 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000, 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000, 000
> 
> 
> 
> ...


dude... gr8.... :-O

But, how u calculated that ??


----------



## harryneopotter (Oct 11, 2007)

^ my secret ............


----------



## mehulved (Oct 11, 2007)

Have you tried searching anywhere? Google gives results to some discussions which point to some answers
*www.dreamincode.net/forums/showtopic25176.htm


----------

