怎么减少代码时间超限问题

跃2.0 2016-12-19 11:47:42
#include <stdio.h>
#include <math.h>
int main(int argc, const char * argv[])
{
int i,n;
double sum=0.0;
while(scanf("%d",&n)!=EOF)
{


for(i=2; i<=n; i++)
{
sum+=log10(i);
}
if(n==1)
sum=1;
printf("%d\n",(int)ceil(sum));
sum=0;
}
return 0;
}
...全文
888 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
跃2.0 2017-01-01
  • 打赏
  • 举报
回复
引用 11 楼 hijack00 的回复:
[quote=引用 10 楼 zuoside__lord 的回复:] [quote=引用 9 楼 hijack00 的回复:] [quote=引用 8 楼 zuoside__lord 的回复:] [quote=引用 5 楼 hijack00 的回复:] log运算相较于乘除法更慢,由于多个log相加等价先相乘再取一次log,在n不是很大的时候,可以先计算连乘积,再取一次log就是最终结果。
请问怎么写,,,,不好意思我不太会,,,,[/quote] #include <stdio.h> #include <math.h> int main(int argc, const char * argv[]) { int i,n; double sum, mul; while(scanf("%d",&n)!=EOF) { mul = 1.0; for(i=2; i<=n; i++) { mul *= i; } sum = log10(mul); printf("%f\n", sum); } return 0; } [/quote] 你的代码错了,输入5应该输出3,但是输出的是2[/quote] 我的代码只是给你提供一个思路,让你照着改的。 你原来的代码里面有个ceil函数,我把它去掉了。你加上这个就是3而不是2了[/quote] 好滴,谢谢
hijack00 2017-01-01
  • 打赏
  • 举报
回复
引用 10 楼 zuoside__lord 的回复:
[quote=引用 9 楼 hijack00 的回复:] [quote=引用 8 楼 zuoside__lord 的回复:] [quote=引用 5 楼 hijack00 的回复:] log运算相较于乘除法更慢,由于多个log相加等价先相乘再取一次log,在n不是很大的时候,可以先计算连乘积,再取一次log就是最终结果。
请问怎么写,,,,不好意思我不太会,,,,[/quote] #include <stdio.h> #include <math.h> int main(int argc, const char * argv[]) { int i,n; double sum, mul; while(scanf("%d",&n)!=EOF) { mul = 1.0; for(i=2; i<=n; i++) { mul *= i; } sum = log10(mul); printf("%f\n", sum); } return 0; } [/quote] 你的代码错了,输入5应该输出3,但是输出的是2[/quote] 我的代码只是给你提供一个思路,让你照着改的。 你原来的代码里面有个ceil函数,我把它去掉了。你加上这个就是3而不是2了
跃2.0 2016-12-31
  • 打赏
  • 举报
回复
引用 9 楼 hijack00 的回复:
[quote=引用 8 楼 zuoside__lord 的回复:] [quote=引用 5 楼 hijack00 的回复:] log运算相较于乘除法更慢,由于多个log相加等价先相乘再取一次log,在n不是很大的时候,可以先计算连乘积,再取一次log就是最终结果。
请问怎么写,,,,不好意思我不太会,,,,[/quote] #include <stdio.h> #include <math.h> int main(int argc, const char * argv[]) { int i,n; double sum, mul; while(scanf("%d",&n)!=EOF) { mul = 1.0; for(i=2; i<=n; i++) { mul *= i; } sum = log10(mul); printf("%f\n", sum); } return 0; } [/quote] 你的代码错了,输入5应该输出3,但是输出的是2
hijack00 2016-12-23
  • 打赏
  • 举报
回复
引用 8 楼 zuoside__lord 的回复:
[quote=引用 5 楼 hijack00 的回复:] log运算相较于乘除法更慢,由于多个log相加等价先相乘再取一次log,在n不是很大的时候,可以先计算连乘积,再取一次log就是最终结果。
请问怎么写,,,,不好意思我不太会,,,,[/quote] #include <stdio.h> #include <math.h> int main(int argc, const char * argv[]) { int i,n; double sum, mul; while(scanf("%d",&n)!=EOF) { mul = 1.0; for(i=2; i<=n; i++) { mul *= i; } sum = log10(mul); printf("%f\n", sum); } return 0; }
跃2.0 2016-12-22
  • 打赏
  • 举报
回复
引用 5 楼 hijack00 的回复:
log运算相较于乘除法更慢,由于多个log相加等价先相乘再取一次log,在n不是很大的时候,可以先计算连乘积,再取一次log就是最终结果。
请问怎么写,,,,不好意思我不太会,,,,
跃2.0 2016-12-22
  • 打赏
  • 举报
回复
引用 2 楼 FancyMouse 的回复:
至少用stirling公式啊,一个个log算多慢。数据不强stirling直接能过的
不会,,,,这个是百度上找了好久,
hijack00 2016-12-21
  • 打赏
  • 举报
回复
log运算相较于乘除法更慢,由于多个log相加等价先相乘再取一次log,在n不是很大的时候,可以先计算连乘积,再取一次log就是最终结果。
跃2.0 2016-12-21
  • 打赏
  • 举报
回复
引用 3 楼 jianwen0529 的回复:
输入数据改为读文本? 看起来你程序慢,是因为控制台输入和打印这块
请问怎么修改,别人让我存起来再一次性输出,我不太会
幻夢之葉 2016-12-20
  • 打赏
  • 举报
回复
输入数据改为读文本? 看起来你程序慢,是因为控制台输入和打印这块
跃2.0 2016-12-20
  • 打赏
  • 举报
回复
有大神可以教我改下么,我不太会修改,
FancyMouse 2016-12-20
  • 打赏
  • 举报
回复
至少用stirling公式啊,一个个log算多慢。数据不强stirling直接能过的
ri_aje 2016-12-20
  • 打赏
  • 举报
回复
一般超时都是算法问题吧。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧