对于c语言中100的阶乘,由于共计158位,远远超过long long,所以不能用直接计算,所以选用数组接收数据。
思路:
首先创建一个数组,
1、使它里面每一个元素为1,
2、设置进位坐标、此时记录进位坐标初始为1,进位要比当前位置高1,每次进位后使进位加1
3、令当前位置数据开始乘以从1开始递增到100的数列,
4、设置临时变量num接收相乘后的值,超过10部分取整记为carry(作为进位的数值), 小于十的部分取余记录为此时a[i]的值;
5、检测每次进位数值carry是否大于10,若大于10,超过10的部分要向前进位,小于10的部分才是此时的进位值,进位后对需要进位坐标加1
int main(int argc,const char* argv[])
{
short a[256] = {1};
int cnt = 1; //最高进位数
for(int i=2; i<101; i++)
{
int carry = 0; //进位数值
for(int j=0; j<cnt; j++)
{
short num = a[j]*i + carry;
a[j] = num%10;
carry = num/10;
}
while(carry)
{
a[cnt++] = carry%10; //首先使当前进位获得个位数值,再使下一位获得十位数值
carry /= 10; //控制循环次数,最多为两次
}
}
while(cnt--)
{
printf("%d", a[cnt]); //逆序输出a
}
}
输出结果