最近小白遇见了一位特别特别无聊的小黑黑,他竟然让我去算数学乘法,1*2*3*4*.....*9997*9998*9999?
但是这肯定是难不住小白的,小白脑子一动就用数组给完成了
阶乘
一:项目需求
1、对您所提交的阶乘代码,皇家山理数学院要求进行“中期”检查,要求能正确给出9999!的结果,请针对您的实现代码进行“测试”,根据测试结果,对您所提交的阶乘代码“质量”进行自我评价。
2、经过交流,皇家山理数学院所希望为能为公众提供Windows版本的大数阶乘计算服务,对任意输入的<=9999以内的整数能正确给出阶乘结果。根据这一明确需要,尝试完成软件的设计与实现,并就“可维护性”进行自我评价。
二:程序设计
阶乘会使得位数增长的非常快,比如20!的值的位数就已经要突破long long的上限了。所以常规的做法是处理不了的,要通过数组的方式来处理。当然这个数字本身不能超过int的范围,并且要提前预估这个数字的阶乘会有多少位。亲测10000以内都管用。
三:算法思想
初始化:array[0] = 1
STEP2:
从2开始乘,1*2 = 2,结果只有1位数,直接存到array[0]
STEP3:
2*3 = 6,结果只有1位数,直接存到array[0]
STEP4:
6*4 = 24,结果有2位数,2存到array[1],4存到array[0]
STEP5:
24*4 = 120,结果有3位数,1存到array[2],2存到array[1],0存到array[0]
四:程序代码
#include<bits/stdc++.h>
using namespace std;
#define MAXLENGTH 500000
int main()
{
int n;
while(cin >> n)
{
int* array = NULL;
array = (int*)malloc(MAXLENGTH*sizeof(int));
if(!array)
{
cout << "超出内存" << endl;
break;
}
else
{
array[0] = 1;
int digit = 1;//位数,随着计算不断更新
for(int i = 2;i <= n;i++)
{
int temp;
int carry = 0;//进位
for(int j = 0;j < digit;j++)//将一个数每一位都乘以i
{
temp = array[j]*i+carry;
array[j] = temp%10;//将一个数的每一位拆开存放到数组的每一位
carry = temp/10;
}
while(carry)
{
array[digit] = carry%10;
carry /= 10;
digit++;
}
}
while(digit >= 1) cout << array[--digit];//逆序输出
cout << endl;
}
free(array);
}
return 0;
}
五:结果表示
9999的阶乘太大了,但是我也要放上
28462596809170545189064132121198688901480514017027992307941799942744113400037644437729907867577847758158840621423175288300423399401535187390524211613827161748198241998275924182892597878981242531205946599625986706560161572036032397926328736717055741975962099479720346153698119897092611277500484198845410475544642442136573303076703628825803548967461117097369578603670191071512730587281041158640561281165385325968425825995584688146430425589836649317059251717204276597407446133400054194052462303436869154059404066227828248371512038322178644627183822923899638992827221879702459387693803094627332292570555459690027875282242544348021127559019169425429028916907219097083690539873747452483372899521802363282741217040268086769210451555840567172555372015852132829034279989818449313610640381489304499621599999359670892980190336998484404665419236258424947163178961192041233108268651071354516845540936033009607210346944377982349430780626069422302681885227592057029230843126188497606560742586279448827155956831533440534425446648416894580425709461673613187605234982286326452921529423479870603344290737158688499178932580691483168854251956006172372636323974420786924642956012306288720122652952964091508301336630982733806353972901506581822574295475894399765113865541208125788683704239208764484761569001264889271590706306409661628038784044485191643790807186112370622133415415065991843875961023926713276546986163657706626438638029848051952769536195259240930908614471907390768585755934786981720734372093104825475628567777694081564074962275254993384112809289637516990219870492405617531786346939798024619737079041868329931016554150742308393176878366923694849025999607729684293977427536263119825416681531891763234839190821000147178932184227805135181734921901146246875769835373441456013122615221391178759688367364087207937002992038279198038702372078039140312368997608152840306051116709484722224870389199993442071395836983063962232079115624044250808919914319837120445598344047556759489212101498152454543594285414390843564419984224855478532163624030098442855331829253154206551237079705816393460296247697010388742206441536626733715428700789122749340684336442889847100840641600093623935261248037975293343928764398316390312776450722479267851700826669598389526150759007349215197592659192708873202594066382118801988854748266048342256457705743973122259700671936061763513579529821794290797705327283267501488024443528681645026165662837546519006171873442260438919298506071515390031106684727360135816706437861756757439184376479658136100599638689552334648781746143243573224864326798481981458432703035895508420534788493364582482592033288089025782388233265770205248970937047210214248413342465268206806732314214483854074182139621846870108359582946965235632764870475718351616879235068366271743711915723361143070121120767608697851559721846485985918643641716850899625516820910793570231118518174775010804622585521314764897490660752877082897667514951009682329689732000622392888056658036140311285465929084078033974900664953205873164948093883816198658850827382468034897864757116679890423568018303504133875731972630897909435710687797