你这个用double都会越界
因为double数据的最大值才是1.7976931348623158e+308
你这个乘起来都得10的万次方以上了
你想要算的话,就用一个变量保存次方数,然后结果每大于10就给它降到十以下
最后的结果用字符串来存储吧
int cnt = 0;//10的次方数
double res = 1;
for(int i = 1;i <= 10000;i++)
{
res * = i;
while(res > 10)
{
res /= 10;
cnt++;
}
}
//最后得到res,以及它的位数
char buf[100] = {0};
sprintf(buf, "%lfe+%d", res, cnt);
buf就是结果了
如果不要求精度;那么可以用double类型;如果追求精度;那么要大数乘法;
大数乘法就是把每个数存放到一个动态数组中;然后逐个相乘;根据长度扩展这个数组;这个操作比较繁琐
用BigInteger
不要定义成int呀,定义成double什么的,扩大数据类型