c语言中怎么计算10 6,C语言试解PTA上基础题目集6-10 阶乘计算升级版

本题要求实现一个打印非负整数阶乘的函数。

函数接口定义:

void Print_Factorial ( const int N );

其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”。

裁判测试程序样例:

#include void Print_Factorial ( const int N );

int main()

{

int N;

scanf("%d", &N);

Print_Factorial(N);

return 0;

}

/* 你的代码将被嵌在这里 */

输入样例:

15

输出样例:

1307674368000

输入样例:

1000

输出样例:

4023872600770937735437024339230039857193748642107146325437999104299385123986290205920442084

8696940480047998861019719605863166687299480855890132382966994459099742450408707375991882362

7727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119

1810458257836478499770124766328898359557354325131853239584630755574091142624174743493475534

2864657661166779739666882029120737914385371958824980812686783837455973174613608537953452422

1586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025

4785893207671691324484262361314125087802080002616831510273418279777047846358681701643650241

5369139828126481021309276124489635992870511496497541990934222156683257208082133318611681155

3615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487

9849599533191017233555566021394503997362807501378376153071277619268490343526252000158885351

4733161170210396817592151090778801939317811419454525722386554146106289218796022383897147608

8506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911

9037540312746222899880051954444142820121873617459926429565817466283029555702990243241531816

1721046583203678690611726015878352075151628422554026517048330422614397428693306169089796848

2590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043

3676601769996128318607883861502794659551311565520360939881806121385586003014356945272242063

4463179746059468257310379008402443243846565724501440282188525247093519062092902313649327349

7565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900

1407673104466402598994902222217659043399018860185665264850617997023561938970178600408118897

2991831102117122984590164192106888438712185564612496079872290851929681937238864261483965738

2291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051

3996942901534830776445690990731524332782882698646027898643211390835062170950025973898635542

7719674282224875758676575234422020757363056949882508796892816275384886339690995982628095612

1450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254

7421735824010636774045957417851608292301353580818400969963725242305608559037006242712434169

0900415369010593398383577793941097002775347200000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

00000000000000000000

使用C语言解答如下:

#include void Print_Factorial(const int N);

int main()

{

int N;

scanf("%d", &N);

Print_Factorial(N);

return 0;

}

#define MAXN 3000

void Print_Factorial(const int N)//本题情况特殊,1000!巨大,C语言中无可容纳的数据类型

{

int result[3333] = { 0 }, i, j;//定义数组,1000!至少需要2657位

if (N < 0)

{

printf("Invalid input");

return;

}

else if (N == 0 || N == 1)//特殊值直接输出

{

printf("1");

return;

}

result[0] = 1;//关键,不可省略

for (i = 2; N >= i; i++)

{

for (j = 0; j < MAXN; j++)

{

result[j] *= i;//每个元素都对应乘上相应的阶乘项

}

for (j = 0; j < MAXN; j++)//开始作进位处理

{

if (result[j] >= 10)//某位大于10,突破10进制

{

result[j + 1] += (result[j] / 10);//其后一位进位

result[j] %= 10;//本位取余

}

}

}

i = MAXN;

while (result[i] == 0)

i--;//从高位往低位输出,确定最高位的位置

for (; i >= 0; i--)

printf("%d", result[i]);//输出

return;

}

希望对大家有所帮助~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值