永发信息网

求N!左边第二位的数字pascal!不要C++!

答案:1  悬赏:50  手机版
解决时间 2021-05-23 03:40
求N!左边第二位的数字pascal!不要C++!
求N!左边第二位的数字
Description
求N!左边第二位的数字k
Input
只有一行且只有一个正整数:N
( 4
最佳答案

算完阶乘后,转为字符串就好处理了.
program Project2(input,output);
var
N:Integer;
S:string;
function jc(i:longint):longint;
var j:Integer;
begin
Result:=1;
for j:=1 to i do
result:=result*j;
end;
begin
read(N);
Str(jc(N),S);
Writeln(N,'!=',S);
Writeln('第二个数字是:', s[2]);
end.
再问: 算阶乘n=1000000时会超类型(包括qword、int64)!
再答: 100万的阶乘的话,应该没有什么类型能存储吧,也无法保证精度。既然只是要我们求出第2位的数,我的想法是每次相乘的时候,都除以一个10的N次幂的数,只要保证整数部分有两位就可以了,后面的精度就不要了。比如15!=1307674368000。可以只保存为13.07674368,再乘以16的时候,再除以10,一直保持两位整数就够了。因为我们只求左边第二位的数字。
再问: 本人没看懂,程序? 可以通过的话奖50分!
再答: 这是我在DELPHI7上写的代码,你参考一下,没装PASCAL的编译器 主要是我写了注释的那里,只保持前面的精度就可以了, 这样算的话,就算是你要算一千万的也能算。 program Project1; {$APPTYPE CONSOLE} uses SysUtils; var N:Integer; S:string; function jc(i:longint):double; var j:Integer; begin Result:=1; for j:=1 to i do begin result:=result*j; {当数大于100W的时候,除以1W,只保持前面的精度} while Result>1000000 do result:=Result/10000; end; end; begin read(N); S:=inttostr(trunc(jc(N))); Writeln('第二个数字是:', s[2]); readln end.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
宿舍插座没电,有没有充电或是放电池的吹风机
双城记英文语录,≪双城记≫经典语
CF进程有哪几个
葬礼红帽子是什么意思,今天早上到店里,看到
诺基亚手机哪个好啊.
上海长宁支路(长宁路)公交车站乘几路到虹桥
出远门送兄弟祝福语,给自己哥们生日祝福语,
手机拆了会有什么坏处?
华桥英语梅岭校区怎么去啊,有知道地址的么
想用英语用英语怎么说,学习资料 英语怎么说?
一张100元的神州行怎样充值有优惠
书香满校园 作文思路,如何写得有立意,深度.20
DNF智力流立法用什么武器好.?
这个图3:这个图3:
怎么制作属于自己的个性QQ闪动头像?
推荐资讯
put down 和take down 的意思
怎么为对友加血
东莞的桥头有啥好吃的
2009年河南美术统考具体是什么时间?
公路自行车是什么意思,为什么说“气动综合轮
学生检查怎么写范文,老师查人我不在学校检讨
爱民商店地址有知道的么?有点事想过去
公司公章有哪些,公司里一般有哪些必备公章
(a+b+c)乘以(a-b+c)等于多少
平安保险建工险,平安建工险保费是怎么计算的
用下面词语造句美妙音乐 静静聆听 聆听 打理
旺铺转让广告怎么写,店面转让的广告怎么写
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?