当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 7 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 从输入文件中读取一个数n,求出n!中末尾0的个数。C++
帖子发表于 : 2009-07-18 19:09 
头像

注册: 2009-03-19 8:39
帖子: 185
送出感谢: 0 次
接收感谢: 0 次
引用:
阶乘问题
问题描述:
从输入文件中读取一个数n,求出n!中末尾0的个数。
输入:
输入有若干行。每一行上有一个整数m,指明接下来的数字的个数。然后是m行,每一行包含一个确定的正整数n,1£n£1000000000。
输出:
对输入行中的每一个数据n,输出一行,其内容是n!中末尾0的个数。
输入样例:
3
3
100
1024

输出样例:
0
24
253
下面是我写的程序
引用:
#include<iostream>
using namespace std;
int main()
{
int m;
cin>>m;
int *x=new int[m];
for(int i=0;i<m;i++)
{
cin>>x[i];
}
for(int j=0;j<m;j++)
{
int temp=x[j];
int sum=0;
for(int n=x[j]-1;n>=0;n--)
{
while(temp%10==0)
{
sum++;
temp/=10;
}
temp%=10;
temp*=n;
}
cout<<sum<<endl;
}
delete []x;
return 0;
}

算出来的结果跟样例不一样,我的算法哪里出错了么


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 从输入文件中读取一个数n,求出n!中末尾0的个数。C++
帖子发表于 : 2009-07-18 21:02 
头像

注册: 2008-07-30 23:21
帖子: 13227
地址: freebuilder@yeah.net
系统: Debian stable AMD64
送出感谢: 36
接收感谢: 121
你的阶乘运算在哪?


_________________
(2015-11-16 更新)适合 WM 的截图脚本
(2015-08-24 更新)Debian、Ubuntu 源列表说明
(2013-02-01 首发)文字如何绘出
▷▷ 【更 多 在 此】 ◁◁
箪食瓢饮随遇安,不求栋梁求参天。
【初韵】一门牛逼的编程语言。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 从输入文件中读取一个数n,求出n!中末尾0的个数。C++
帖子发表于 : 2009-07-18 21:02 

注册: 2006-03-10 15:10
帖子: 3182
地址: xi'an China
送出感谢: 0 次
接收感谢: 2
引用:
#include<iostream>
using namespace std;
int main()
{
int m;
cin>>m;
int *x=new int[m];
for(int i=0;i<m;i++)
{
cin>>x[i];
}
for(int j=0;j<m;j++)
{
int temp=x[j];
int sum=0;
for(int n=x[j]-1;n>=0;n--)
{
while(temp%10==0)
{
sum++;
temp/=10;
}
temp%=10;
temp*=n;
}
cout<<sum<<endl;
}
delete []x;
return 0;
}


这句有问题!
比如说你的temp此处为25的奇数倍,它乘以4的倍数,至少有2个零; 你对10取模,再乘以4的倍数,0的个数就少了


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 从输入文件中读取一个数n,求出n!中末尾0的个数。C++
帖子发表于 : 2009-07-19 8:57 
头像

注册: 2009-03-19 8:39
帖子: 185
送出感谢: 0 次
接收感谢: 0 次
对啊
楼上说的有道理,谢谢
我再把程序改改


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 从输入文件中读取一个数n,求出n!中末尾0的个数。C++
帖子发表于 : 2009-07-19 14:45 
头像

注册: 2005-12-28 1:16
帖子: 3916
地址: 火星
系统: Ubuntu 12.10 X64
送出感谢: 1
接收感谢: 0 次
其实就是统计因子5的个数
因为2比5多,所以有一个5,必然产生一个0,有一个0,必然是因为一个2和一个5的结果。

从1到n,可以先计算 n/5,那些5的倍数的数,都变成原来的1/5
举个例子 1到100,全体除以5,去掉不能整除的 得到 1,2,3,4....,20
这就转变为 f(n) = n/5 + f(n/5)

这样就可以了
代码:
    int total=0;
    while (n) {
        total += n/=5;
    }   


_________________
目前负债150多万


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 从输入文件中读取一个数n,求出n!中末尾0的个数。C++
帖子发表于 : 2009-07-19 15:32 
头像

注册: 2009-03-19 8:39
帖子: 185
送出感谢: 0 次
接收感谢: 0 次
精辟
看来我还是得多想想


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 从输入文件中读取一个数n,求出n!中末尾0的个数。C++
帖子发表于 : 2009-07-19 15:47 
头像

注册: 2009-03-19 8:39
帖子: 185
送出感谢: 0 次
接收感谢: 0 次
我将我的程序完全重写了一下,提交到了我学校的判题系统上,通过了
代码:
#include<iostream>
using namespace std;

int main()
{
   int n;
   cin>>n;
   int *x=new int[n];
   for(int i=0;i<n;i++)
      cin>>x[i];
   for(int i=0;i<n;i++)
   {
      int sum=0;
      for(int j=x[i];j>0;j--)
      {
         int temp=j;
         while(temp%5==0&&temp>0)
         {
            sum++;
            temp/=5;
         }
      }
      cout<<sum<<endl;
   }
   delete []x;
   return 0;
}
我觉得这种思路很好,还要好好学习


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 7 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译