1089: 阶乘的最高位
题目中给出提示 double类型会溢出,所以我就想到用小数,每次都*0.1,这样就能控制大小,果然溢出了…
我就想去看看大佬们怎么写的…可惜答案不正确…
我就去搜了一下阶乘的结果,可以看到 后面的0非常之多(在进行乘法运算的时候,末尾的0是没有用滴)因此我们可以去除掉,所以当数字大于100时,就整除10;
#include<stdio.h>
#include<math.h>
int main(){
int n;
scanf("%d",&n);
int i=1;
double sum = 1;
while(i<=n){
while(sum>100){
sum = sum /10;
}
sum = sum *i;
i++;
}
while(sum>10){
sum = sum/10;
}
printf("%d",(int)sum);
}
✨非常值得注意的就是 sum 得是 double类型得,如果是 int 结果不正确,因为后面大于100得可能是 123 这种数字,所以还是要保留小数得 12.3(这样就会缩小了10倍,而且对于前面的数字不会造成影响)
最后吐槽一下 :为啥有些博主的答案是错误的 还发布出来捏…(误导人。。。)