求1到100的阶乘,注意溢出啊啊溢出啊啊
答案:4 悬赏:40 手机版
解决时间 2021-02-11 07:26
- 提问者网友:原来太熟悉了会陌生
- 2021-02-11 03:50
求1到100的阶乘,注意溢出啊啊溢出啊啊
最佳答案
- 五星知识达人网友:渡鹤影
- 2021-02-11 04:36
#include
#define N 10000
int main()
{
static long int r[N]={1};
int i,j;
int k=0,l=0;
for(i=1;i<=100;i++)
{
for(j=0;j<=l;j++)
{
r[j]=r[j]*i+k;
k=r[j]/10000;
r[j]=r[j]%10000;
}
if(k)
{
l++;
r[j]=k;
k=0;
}
j=l;
printf("%d!=%d",i,r[j--]);
for(;j>=0;j--)
{
printf("%04d",r[j]);
}
printf("\n");
}
return 0;
}
1!=1
2!=2
3!=6
4!=24
5!=120
6!=720
7!=5040
8!=40320
9!=362880
10!=3628800
11!=39916800
12!=479001600
13!=6227020800
14!=87178291200
15!=1307674368000
16!=20922789888000
17!=355687428096000
18!=6402373705728000
19!=121645100408832000
20!=2432902008176640000
21!=51090942171709440000
22!=1124000727777607680000
23!=25852016738884976640000
24!=620448401733239439360000
25!=15511210043330985984000000
26!=403291461126605635584000000
27!=10888869450418352160768000000
28!=304888344611713860501504000000
29!=8841761993739701954543616000000
30!=265252859812191058636308480000000
31!=8222838654177922817725562880000000
32!=263130836933693530167218012160000000
33!=8683317618811886495518194401280000000
34!=295232799039604140847618609643520000000
35!=10333147966386144929666651337523200000000
36!=371993326789901217467999448150835200000000
37!=13763753091226345046315979581580902400000000
38!=523022617466601111760007224100074291200000000
39!=20397882081197443358640281739902897356800000000
40!=815915283247897734345611269596115894272000000000
41!=33452526613163807108170062053440751665152000000000
42!=1405006117752879898543142606244511569936384000000000
43!=60415263063373835637355132068513997507264512000000000
44!=2658271574788448768043625811014615890319638528000000000
45!=119622220865480194561963161495657715064383733760000000000
46!=5502622159812088949850305428800254892961651752960000000000
47!=258623241511168180642964355153611979969197632389120000000000
48!=12413915592536072670862289047373375038521486354677760000000000
49!=608281864034267560872252163321295376887552831379210240000000000
50!=30414093201713378043612608166064768844377641568960512000000000000
51!=1551118753287382280224243016469303211063259720016986112000000000000
52!=80658175170943878571660636856403766975289505440883277824000000000000
53!=4274883284060025564298013753389399649690343788366813724672000000000000
54!=230843697339241380472092742683027581083278564571807941132288000000000000
55!=12696403353658275925965100847566516959580321051449436762275840000000000000
56!=710998587804863451854045647463724949736497978881168458687447040000000000000
57!=4052691950487721675568060190543232213498038479622660214518448128000000000000
0
58!=2350561331282878571829474910515074683828862318181142924420699914240000000000
000
59!=1386831185456898357379390197203894063459028767726874325408212949401600000000
00000
60!=8320987112741390144276341183223364380754172606361245952449277696409600000000
000000
61!=5075802138772247988008568121766252272260045289880360030994059394809856000000
00000000
62!=3146997326038793752565312235495076408801228079725823219216316824782110720000
0000000000
63!=1982608315404440064116146708361898137544773690227268628106279599612729753600
000000000000
64!=1268869321858841641034333893351614808028655161745451921988018943752147042304
00000000000000
65!=8247650592082470666723170306785496252186258551345437492922123134388955774976
000000000000000
66!=5443449390774430640037292402478427526442930643887988745328601268696710811484
16000000000000000
67!=3647111091818868528824985909660546442716763531404952459370162850026796243694
3872000000000000000
68!=2480035542436830599600990418569171581047399201355367672371710738018221445712
183296000000000000000
69!=1711224524281413113724683388812728390922705448935203693936480409232572797541
40647424000000000000000
70!=1197857166996989179607278372168909873645893814254642585755536286462800958278
9845319680000000000000000
71!=8504785885678623175211676442399260102885846081207962358864307633885886803780
79017697280000000000000000
72!=6123445837688608686152407038527467274077809178469732898382301496397838498722
1689274204160000000000000000
73!=4470115461512684340891257138125051110076800700282905015819080092370422104067
183317016903680000000000000000
74!=3307885441519386412259530282212537821456832518209349711706119268354112357009
71565459250872320000000000000000
75!=2480914081139539809194647711659403366092624388657012283779589451265584267757
2867409443815424000000000000000000
76!=1885494701666050254987932260861146558230394535379329335672487982961844043495
537923117729972224000000000000000000
77!=1451830920282858696340707840863082849837403792242083588467815746880619913491
56420080065207861248000000000000000000
78!=1132428117820629783145752115873204622873174957948825199004896282566883532523
4200766245086213177344000000000000000000
79!=8946182130782975286851441715398316520698082167795719072138680632278379906935
01860533361810841010176000000000000000000
80!=7156945704626380229481153372318653216558465734236575257710944505822703925548
0148842668944867280814080000000000000000000
81!=5797126020747367985879734231578109105412357244731625958745865049716390179693
892056256184534249745940480000000000000000000
82!=4753643337012841748421382069894049466438132940679933286171609340767439947348
99148613007131808479167119360000000000000000000
83!=3945523969720658651189747118012061057143650340764344627522435752836975156299
6629334879591940103770870906880000000000000000000
84!=3314240134565353266999387579130131288000666286242049487118846032383059131291
716864129885722968716753156177920000000000000000000
85!=2817104114380550276949479442260611594800566343305742064051019127525600261597
95933451040286452340924018275123200000000000000000000
86!=2422709538367273238176552320344125971528487055242938175083876449672016224974
2450276789464634901319465571660595200000000000000000000
87!=2107757298379527717213600518699389595229783738061356212322972511214654115727
593174080683423236414793504734471782400000000000000000000
88!=1854826422573984391147968456455462843802209689493993466844215809868895621840
28199319100141244804501828416633516851200000000000000000000
89!=1650795516090846108121691926245361930983966623649654185491352070783317103437
8509739399912570787600662729080382999756800000000000000000000
90!=1485715964481761497309522733620825737885569961284688766942216863704985393094
065876545992131370884059645617234469978112000000000000000000000
91!=1352001527678402962551665687594951421475868664769066777917417345971536707715
59994765685283954750449427751168336768008192000000000000000000000
92!=1243841405464130725547532432587355307757799171587541435684023958293813771098
3519518443046123837041347353107486982656753664000000000000000000000
93!=1156772507081641574759205162306240436214753229576413535186142281213246807121
467315215203289516844845303838996289387078090752000000000000000000000
94!=1087366156656743080273652852567866010041868035801828723074973744340451998694
17927630229109214583415458560865651202385340530688000000000000000000000
95!=1032997848823905926259970209939472709539774634011737286921225057123429398759
4703124871765375385424468563282236864226607350415360000000000000000000000
96!=9916779348709496892095714015418938011581836486512677954443760548384922228090
91499987689476037000748982075094738965754305639874560000000000000000000000
97!=9619275968248211985332842594956369871234381391917297615810447731933374561248
1875498805879175589072651261284189679678167647067832320000000000000000000000
98!=9426890448883247745626185743057242473809693764078951663494238777294707070023
223798882976159207729119823605850588608460429412647567360000000000000000000000
99!=9332621544394415268169923885626670049071596826438162146859296389521759999322
99156089414639761565182862536979208272237582511852109168640000000000000000000000
100!=933262154439441526816992388562667004907159682643816214685929638952175999932
29915608941463976156518286253697920827223758251185210916864000000000000000000000
000
请按任意键继续. . .追问这个这个。。我想求它们一起的和追答#include
#define N 10000
int main()
{
static long int r[N]={1};
static long int t[N]={0};
int i,j;
int k=0,l=0,tk=0;
for(i=1;i<=100;i++)
{
for(j=0;j<=l;j++)
{
r[j]=r[j]*i+k;
k=r[j]/10000;
r[j]=r[j]%10000;
t[j]=t[j]+r[j]+tk;
tk=t[j]/10000;
t[j]=t[j]%10000;
}
if(k)
{
l++;
r[j]=k;
t[j]+=r[j];
k=0;
}
if(tk)
{
t[j]+=tk;
if(t[j]>10000)
{
t[j+1]=1;
t[j]=t[j]%10000;
}
tk=0;
}
j=l;
}
printf("1!+2!+3!+....+99!+100!=\n%d",t[j--]);
for(;j>=0;j--)
{
printf("%04d",t[j]);
}
printf("\n");
return 0;
}
1!+2!+3!+....+99!+100!=
94269001683709979260859834124473539872070722613982672442938359305624678223479506023400294093599136466986609124347432647622826870038220556442336528920420940313
请按任意键继续. . .追问看不懂。,能给我每段来个注释么。谢谢追答//整体思路是用数组保存结果,每个int元素保存4位
#include
#define N 10000
int main()
{
static long int r[N]={1}; //保存阶乘值
static long int t[N]={0}; //保存和
int i,j;
int k=0,l=0,tk=0; //k用来标记阶乘结果进位值,l用来标记长度,tk用来和的进位值
for(i=1;i<=100;i++)
{
for(j=0;j<=l;j++)
{
r[j]=r[j]*i+k; //每个元素都和i乘一次并且和上一位的结果的进位值相加
k=r[j]/10000; //求出本次乘法的进位值
r[j]=r[j]%10000; //留下后4位
t[j]=t[j]+r[j]+tk; //和数组的每个元素都和上面计算出的阶乘元素相加,并且和上一次求和产生的进位值tk相加
tk=t[j]/10000; //留下后4位
t[j]=t[j]%10000; //求出本次进位值
}
if(k) //如果上面的循环计算完以后k不为0,那说明最高位有进位
{
l++; //下次内循环长度+1
r[j]=k; //最高位==k
t[j]+=r[j]; //和数组也加进去
k=0; //k置0
}
if(tk) //如果tk不等于0.说明和数组最高位有进位,处理类似上面的
{
t[j]+=tk;
if(t[j]>10000)
{
t[j+1]=1;
t[j]=t[j]%10000;
}
tk=0;
}
j=l;
}
printf("1!+2!+3!+....+99!+100!=
%d",t[j--]); // 输出 (最高4位不需要输出前置0,所以单独输出一次)
for(;j>=0;j--)
{
printf("%04d",t[j]); //4位有效数字,不满4位则前面补0
}
printf("
");
return 0;
}
#define N 10000
int main()
{
static long int r[N]={1};
int i,j;
int k=0,l=0;
for(i=1;i<=100;i++)
{
for(j=0;j<=l;j++)
{
r[j]=r[j]*i+k;
k=r[j]/10000;
r[j]=r[j]%10000;
}
if(k)
{
l++;
r[j]=k;
k=0;
}
j=l;
printf("%d!=%d",i,r[j--]);
for(;j>=0;j--)
{
printf("%04d",r[j]);
}
printf("\n");
}
return 0;
}
1!=1
2!=2
3!=6
4!=24
5!=120
6!=720
7!=5040
8!=40320
9!=362880
10!=3628800
11!=39916800
12!=479001600
13!=6227020800
14!=87178291200
15!=1307674368000
16!=20922789888000
17!=355687428096000
18!=6402373705728000
19!=121645100408832000
20!=2432902008176640000
21!=51090942171709440000
22!=1124000727777607680000
23!=25852016738884976640000
24!=620448401733239439360000
25!=15511210043330985984000000
26!=403291461126605635584000000
27!=10888869450418352160768000000
28!=304888344611713860501504000000
29!=8841761993739701954543616000000
30!=265252859812191058636308480000000
31!=8222838654177922817725562880000000
32!=263130836933693530167218012160000000
33!=8683317618811886495518194401280000000
34!=295232799039604140847618609643520000000
35!=10333147966386144929666651337523200000000
36!=371993326789901217467999448150835200000000
37!=13763753091226345046315979581580902400000000
38!=523022617466601111760007224100074291200000000
39!=20397882081197443358640281739902897356800000000
40!=815915283247897734345611269596115894272000000000
41!=33452526613163807108170062053440751665152000000000
42!=1405006117752879898543142606244511569936384000000000
43!=60415263063373835637355132068513997507264512000000000
44!=2658271574788448768043625811014615890319638528000000000
45!=119622220865480194561963161495657715064383733760000000000
46!=5502622159812088949850305428800254892961651752960000000000
47!=258623241511168180642964355153611979969197632389120000000000
48!=12413915592536072670862289047373375038521486354677760000000000
49!=608281864034267560872252163321295376887552831379210240000000000
50!=30414093201713378043612608166064768844377641568960512000000000000
51!=1551118753287382280224243016469303211063259720016986112000000000000
52!=80658175170943878571660636856403766975289505440883277824000000000000
53!=4274883284060025564298013753389399649690343788366813724672000000000000
54!=230843697339241380472092742683027581083278564571807941132288000000000000
55!=12696403353658275925965100847566516959580321051449436762275840000000000000
56!=710998587804863451854045647463724949736497978881168458687447040000000000000
57!=4052691950487721675568060190543232213498038479622660214518448128000000000000
0
58!=2350561331282878571829474910515074683828862318181142924420699914240000000000
000
59!=1386831185456898357379390197203894063459028767726874325408212949401600000000
00000
60!=8320987112741390144276341183223364380754172606361245952449277696409600000000
000000
61!=5075802138772247988008568121766252272260045289880360030994059394809856000000
00000000
62!=3146997326038793752565312235495076408801228079725823219216316824782110720000
0000000000
63!=1982608315404440064116146708361898137544773690227268628106279599612729753600
000000000000
64!=1268869321858841641034333893351614808028655161745451921988018943752147042304
00000000000000
65!=8247650592082470666723170306785496252186258551345437492922123134388955774976
000000000000000
66!=5443449390774430640037292402478427526442930643887988745328601268696710811484
16000000000000000
67!=3647111091818868528824985909660546442716763531404952459370162850026796243694
3872000000000000000
68!=2480035542436830599600990418569171581047399201355367672371710738018221445712
183296000000000000000
69!=1711224524281413113724683388812728390922705448935203693936480409232572797541
40647424000000000000000
70!=1197857166996989179607278372168909873645893814254642585755536286462800958278
9845319680000000000000000
71!=8504785885678623175211676442399260102885846081207962358864307633885886803780
79017697280000000000000000
72!=6123445837688608686152407038527467274077809178469732898382301496397838498722
1689274204160000000000000000
73!=4470115461512684340891257138125051110076800700282905015819080092370422104067
183317016903680000000000000000
74!=3307885441519386412259530282212537821456832518209349711706119268354112357009
71565459250872320000000000000000
75!=2480914081139539809194647711659403366092624388657012283779589451265584267757
2867409443815424000000000000000000
76!=1885494701666050254987932260861146558230394535379329335672487982961844043495
537923117729972224000000000000000000
77!=1451830920282858696340707840863082849837403792242083588467815746880619913491
56420080065207861248000000000000000000
78!=1132428117820629783145752115873204622873174957948825199004896282566883532523
4200766245086213177344000000000000000000
79!=8946182130782975286851441715398316520698082167795719072138680632278379906935
01860533361810841010176000000000000000000
80!=7156945704626380229481153372318653216558465734236575257710944505822703925548
0148842668944867280814080000000000000000000
81!=5797126020747367985879734231578109105412357244731625958745865049716390179693
892056256184534249745940480000000000000000000
82!=4753643337012841748421382069894049466438132940679933286171609340767439947348
99148613007131808479167119360000000000000000000
83!=3945523969720658651189747118012061057143650340764344627522435752836975156299
6629334879591940103770870906880000000000000000000
84!=3314240134565353266999387579130131288000666286242049487118846032383059131291
716864129885722968716753156177920000000000000000000
85!=2817104114380550276949479442260611594800566343305742064051019127525600261597
95933451040286452340924018275123200000000000000000000
86!=2422709538367273238176552320344125971528487055242938175083876449672016224974
2450276789464634901319465571660595200000000000000000000
87!=2107757298379527717213600518699389595229783738061356212322972511214654115727
593174080683423236414793504734471782400000000000000000000
88!=1854826422573984391147968456455462843802209689493993466844215809868895621840
28199319100141244804501828416633516851200000000000000000000
89!=1650795516090846108121691926245361930983966623649654185491352070783317103437
8509739399912570787600662729080382999756800000000000000000000
90!=1485715964481761497309522733620825737885569961284688766942216863704985393094
065876545992131370884059645617234469978112000000000000000000000
91!=1352001527678402962551665687594951421475868664769066777917417345971536707715
59994765685283954750449427751168336768008192000000000000000000000
92!=1243841405464130725547532432587355307757799171587541435684023958293813771098
3519518443046123837041347353107486982656753664000000000000000000000
93!=1156772507081641574759205162306240436214753229576413535186142281213246807121
467315215203289516844845303838996289387078090752000000000000000000000
94!=1087366156656743080273652852567866010041868035801828723074973744340451998694
17927630229109214583415458560865651202385340530688000000000000000000000
95!=1032997848823905926259970209939472709539774634011737286921225057123429398759
4703124871765375385424468563282236864226607350415360000000000000000000000
96!=9916779348709496892095714015418938011581836486512677954443760548384922228090
91499987689476037000748982075094738965754305639874560000000000000000000000
97!=9619275968248211985332842594956369871234381391917297615810447731933374561248
1875498805879175589072651261284189679678167647067832320000000000000000000000
98!=9426890448883247745626185743057242473809693764078951663494238777294707070023
223798882976159207729119823605850588608460429412647567360000000000000000000000
99!=9332621544394415268169923885626670049071596826438162146859296389521759999322
99156089414639761565182862536979208272237582511852109168640000000000000000000000
100!=933262154439441526816992388562667004907159682643816214685929638952175999932
29915608941463976156518286253697920827223758251185210916864000000000000000000000
000
请按任意键继续. . .追问这个这个。。我想求它们一起的和追答#include
#define N 10000
int main()
{
static long int r[N]={1};
static long int t[N]={0};
int i,j;
int k=0,l=0,tk=0;
for(i=1;i<=100;i++)
{
for(j=0;j<=l;j++)
{
r[j]=r[j]*i+k;
k=r[j]/10000;
r[j]=r[j]%10000;
t[j]=t[j]+r[j]+tk;
tk=t[j]/10000;
t[j]=t[j]%10000;
}
if(k)
{
l++;
r[j]=k;
t[j]+=r[j];
k=0;
}
if(tk)
{
t[j]+=tk;
if(t[j]>10000)
{
t[j+1]=1;
t[j]=t[j]%10000;
}
tk=0;
}
j=l;
}
printf("1!+2!+3!+....+99!+100!=\n%d",t[j--]);
for(;j>=0;j--)
{
printf("%04d",t[j]);
}
printf("\n");
return 0;
}
1!+2!+3!+....+99!+100!=
94269001683709979260859834124473539872070722613982672442938359305624678223479506023400294093599136466986609124347432647622826870038220556442336528920420940313
请按任意键继续. . .追问看不懂。,能给我每段来个注释么。谢谢追答//整体思路是用数组保存结果,每个int元素保存4位
#include
#define N 10000
int main()
{
static long int r[N]={1}; //保存阶乘值
static long int t[N]={0}; //保存和
int i,j;
int k=0,l=0,tk=0; //k用来标记阶乘结果进位值,l用来标记长度,tk用来和的进位值
for(i=1;i<=100;i++)
{
for(j=0;j<=l;j++)
{
r[j]=r[j]*i+k; //每个元素都和i乘一次并且和上一位的结果的进位值相加
k=r[j]/10000; //求出本次乘法的进位值
r[j]=r[j]%10000; //留下后4位
t[j]=t[j]+r[j]+tk; //和数组的每个元素都和上面计算出的阶乘元素相加,并且和上一次求和产生的进位值tk相加
tk=t[j]/10000; //留下后4位
t[j]=t[j]%10000; //求出本次进位值
}
if(k) //如果上面的循环计算完以后k不为0,那说明最高位有进位
{
l++; //下次内循环长度+1
r[j]=k; //最高位==k
t[j]+=r[j]; //和数组也加进去
k=0; //k置0
}
if(tk) //如果tk不等于0.说明和数组最高位有进位,处理类似上面的
{
t[j]+=tk;
if(t[j]>10000)
{
t[j+1]=1;
t[j]=t[j]%10000;
}
tk=0;
}
j=l;
}
printf("1!+2!+3!+....+99!+100!=
%d",t[j--]); // 输出 (最高4位不需要输出前置0,所以单独输出一次)
for(;j>=0;j--)
{
printf("%04d",t[j]); //4位有效数字,不满4位则前面补0
}
printf("
");
return 0;
}
全部回答
- 1楼网友:一叶十三刺
- 2021-02-11 06:52
使用数组存放大数进行计算#include
int main()
{
int n = 1;
scanf("%d",&n);
int a[20000]; //存放大数的数组
int carry;//进位
int i;
int digit = 1;
a[0] = 1;
int temp;
for(i = 2; i <= n; ++i)
{
carry = 0;
for(int j = 1; j <= digit; ++j)//digit 大数的位数
{
temp = a[j-1] * i + carry;//各位依次与i相乘
a[j-1] = temp % 10;//留下个位,进位下面进行处理
carry = temp / 10;//得出进位
}
while(carry)
{
a[++digit-1] = carry % 10;//处理进位,加到前一位
carry /= 10; //进位除以10,有则继续进位
}
}
for(i = digit; i >=1; --i)//打印大数
{
printf("%d",a[i-1]);
}
printf(" ");
return 0;
}追问不好意思。我想求1到100的阶乘的和,是和,。可不可以再帮我弄弄?
- 2楼网友:独钓一江月
- 2021-02-11 05:59
就一个循环的事,为什么会到堆栈溢出?不需要函数递归。
double factorial(unsigned int ui)
{
double dvel = 1.0;
if (ui == 0)
{}
else if (ui <= 20) // 超过20的阶乘就会溢出 int64的最大值
{
unsigned long long ull = 1;
for (unsigned int i=1; i<=ui; i++)
ull *= i;
dvel = (double)ull; // 强转int64的计算结果为double,可以自由调整
}
else
{
double d = 1.0;
for (unsigned int i=1; i<=ui; i++) // 一个循环的事
double *= i;
dvel = d;
}
return dvel;
}
int main(int argc, int* argv)
{
int i = 100;
double d = factorial(i);
printf("Factorial of %d is: %lf ", i, d);
system("pause");
}
- 3楼网友:几近狂妄
- 2021-02-11 05:21
用递归实现
定义递归函数 y
int y(int n)
{
if (n==0) return 1;
else return n*y(n-1);
}
主程序调用
int t=y(100); //得出100的阶乘
定义递归函数 y
int y(int n)
{
if (n==0) return 1;
else return n*y(n-1);
}
主程序调用
int t=y(100); //得出100的阶乘
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯