TJU1016

大憨熊 提交于 2019-11-27 01:45:55
一开始做这题时大脑短路……连用浮点数来表示都没想到,所以我的做法是取1~n的对数,然后加起来,再减去一个整数使那个浮点在1~2的范围内,pow10以后取个位,答案就出来了。后来想想,用浮点这题有可能也做得出来,不大可能出现误差的~
 P.S. 今天刚刚发现浮点没法做。long double的范围只到10的4000多次,而100000!可以到10的450000多次!所以用浮点不现实的了~~
None.gif#include<iostream>
None.gif#include
<cmath>
None.gif
using namespace std;
None.gif
None.gif
int main()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    
long double e;
InBlock.gif    
long data,c,d,f;
InBlock.gif    cin
>>data;
InBlock.gif    
while(data-- > 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        cin
>>c;
InBlock.gif        
if(c<4)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
for(d=2,f=1;d<=c;d++) f*=d;
InBlock.gif            cout
<<f<<endl;
InBlock.gif            
continue;
ExpandedSubBlockEnd.gif        }

InBlock.gif        
for(d=2,e=0.0;d<=c;d++)
InBlock.gif            e 
+= log10l((long double)d);
InBlock.gif        
while(e>=2.0) e -= 1.0;
InBlock.gif        e 
= powl(10.0,e);
InBlock.gif        c 
= e;
InBlock.gif        
while(e-c>0.99) c+=1;
InBlock.gif        cout
<<c%10<<endl;
ExpandedSubBlockEnd.gif    }

InBlock.gif    
return 0;
ExpandedBlockEnd.gif}

转载于:https://www.cnblogs.com/FancyMouse/articles/219754.html

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!