1024!末尾有几个零?

shiter
人工智能领域优质创作者
博客专家认证
2012-02-06 11:55:34
1024!末尾有几个零?
...全文
1924 35 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiter 2012-02-13
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 zhao4zhong1 的回复:]
C/C++ code

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int COMPARE(string number1, string number2) {
int i,j;

int length1 = number1.size();
……
[/Quote]
感谢赵老师的四则预算。。。
赵4老师 2012-02-13
  • 打赏
  • 举报
回复
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int COMPARE(string number1, string number2) {
int i,j;

int length1 = number1.size();
int length2 = number2.size();

if(number1.size() == 0) number1 = "0";
if(number2.size() == 0) number2 = "0";

j = 0;
for(i = 0; i < length1; ++i) {
if(number1[i] == '0') ++j;
else break;
}
number1 = number1.substr(j);

j = 0;
for(i = 0; i < length2; ++i) {
if(number2[i] == '0') ++j;
else break;
}
number2 = number2.substr(j);

length1 = number1.size();
length2 = number2.size();

if(length1 > length2) {
return 1;
} else if(length1 == length2) {
if(number1.compare(number2) > 0) {
return 1;
} else if(number1.compare(number2) == 0) {
return 0;
} else {
return -1;
}
} else {
return -1;
}

return 0;
}
string PLUS(string number1,string number2) {
int i;
int length1 = number1.size();
int length2 = number2.size();

string result="";

reverse(number1.begin(), number1.end());
reverse(number2.begin(), number2.end());

for(i = 0; i < length1 && i < length2; i++) {
char c = (char)(number1[i] + number2[i] - 48);
result = result + c;
}

while(i < length1) {
result = result + number1[i];
++i;
}

while(i < length2) {
result = result + number2[i];
++i;
}

int carry = 0;
for(i = 0; i < (int)result.size(); ++i) {
int value = result[i] - 48 + carry;
result[i] = (char)(value % 10 + 48);
carry = value / 10;
}

if(carry !=0 ) {
result = result + (char)(carry + 48);
}

for(i = result.size() - 1; i >= 0; i--) {
if(result[i] != '0') break;
}

result = result.substr(0, i + 1);

reverse(result.begin(), result.end());
if(result.length() == 0) result = "0";
return result;
}
string MINUS(string number1,string number2) {
int i;
string result = "";

int length1 = number1.size();
int length2 = number2.size();

if(COMPARE(number2,number1) > 0) {
return "-" + MINUS(number2, number1);
}

reverse(number1.begin(),number1.end());
reverse(number2.begin(),number2.end());

for(i = 0; i < length1 && i < length2; i++) {
char c = number1[i] - number2[i] + 48;
result = result + c;
}

if(i < length1) {
for(; i < length1; i++) {
result = result + number1[i];
}
}

int carry = 0;
for(i = 0; i < (int)result.length(); i++) {
int value = result[i] - 48 + carry;
if(value < 0) {
value = value + 10;
carry = -1;
} else carry = 0;
result[i]=(char)(value + 48);
}

for(i = result.size() - 1; i >= 0; i--) {
if(result[i] != '0')break;
}

result = result.substr(0, i+1);

reverse(result.begin(), result.end());
if(result.length()==0) result = "0";
return result;
}
string MULTIPLY(string number1, string number2) {
int i, j;
int *iresult;
int length1 = number1.size();
int length2 = number2.size();
string result = "";

reverse(number1.begin(), number1.end());
reverse(number2.begin(), number2.end());

iresult = (int*)malloc(sizeof(int) * (length1 + length2 + 1));
memset(iresult, 0, sizeof(int) * (length1 + length2 + 1));

for(i = 0; i < length1; i++) {
for(j = 0; j < length2; j++) {
iresult[i+j] += ((number1[i] - 48) * (number2[j] - 48));
}
}

int carry = 0;
for(i = 0; i < length1 + length2; i++) {
int value = iresult[i] + carry;
iresult[i] = value % 10;
carry = value / 10;
}

for(i = length1 + length2 - 1; i >= 0; i--) {
if(iresult[i] != 0)break;
}

for(; i >= 0; i--) {
result = result + (char)(iresult[i]+48);
}

free(iresult);

if(result == "") result = "0";
return result;
}
string factorial(string n) {
string temp = "1";
string i;
for(i = "1"; COMPARE(i, n) <= 0; i = PLUS(i, "1")) {
temp = MULTIPLY(temp, i);
}
return temp;
}
int main(void) {
cout << factorial("1024") << endl;
return 0;
}
觅食的猫猫 2012-02-07
  • 打赏
  • 举报
回复
哦,原来是查5的个数啊,25=5*5
原来如此!!终于看明白了
anyazhou2010 2012-02-07
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 wangyaninglm 的回复:]
引用 25 楼 anyidan 的回复:
坛子里有一贴类似的,用最后两位做的,搜搜

看到上面的求5
的倍数的算法已经很好了
[/Quote]用这个5的倍数的算法,必须满足一个条件就是2的个数必须比5的多。
shiter 2012-02-07
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 anyazhou2010 的回复:]
引用 28 楼 wangyaninglm 的回复:
引用 25 楼 anyidan 的回复:
坛子里有一贴类似的,用最后两位做的,搜搜

看到上面的求5
的倍数的算法已经很好了
用这个5的倍数的算法,必须满足一个条件就是2的个数必须比5的多。
[/Quote]
对对对,这个细节需要推广
Minikinfish 2012-02-07
  • 打赏
  • 举报
回复
每10个数有2个0,100内遇到25以及75多1个0,所以每逢100个数有22个0。
所以该题目共计222个0
Teng_s2000 2012-02-07
  • 打赏
  • 举报
回复

经典算法,必须搞明白的呀
Qyee16 2012-02-06
  • 打赏
  • 举报
回复
1024 后面有 〇 ?????????????????、


谁看到零了??????


不告诉你1024表示什么,你知道1024是几进制的?????
面包大师 2012-02-06
  • 打赏
  • 举报
回复
1024的二进制表示为
100 0000 0000
所以是十个
追求执着 2012-02-06
  • 打赏
  • 举报
回复
1024的阶乘吗?没看懂!
sagegz 2012-02-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 wangyaninglm 的回复:]
1024!末尾有几个零?
[/Quote]
什么进制?
lee_鹿游原 2012-02-06
  • 打赏
  • 举报
回复

#include <stdio.h>

int totalzero(int n)
{
int total = 0;
while (n > 5)
{
n = (n - (n % 5)) / 5;
total += n;
}
return total;
}

void main()
{
printf("%d\n", totalzero(1024));
}
justkk 2012-02-06
  • 打赏
  • 举报
回复
10 个
shiter 2012-02-06
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 anyidan 的回复:]
坛子里有一贴类似的,用最后两位做的,搜搜
[/Quote]
看到上面的求5
的倍数的算法已经很好了
shiter 2012-02-06
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 f562158232 的回复:]
看半天才看见,题目1024后面有个感叹号!
[/Quote]
哈哈,这可是面试题偶,那是估计你不会看错的。
觅食的猫猫 2012-02-06
  • 打赏
  • 举报
回复
看半天才看见,题目1024后面有个感叹号!
AnYidan 2012-02-06
  • 打赏
  • 举报
回复
坛子里有一贴类似的,用最后两位做的,搜搜
shiter 2012-02-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zhao4zhong1 的回复:]
Python code

m=input("Calculate N!, input N:")
n, r = 1, 1
while n <= m:
r=r*n
n=n+1
print r

Calculate N!, input N:1024
54……20……0
1024!末尾有253个0
[/Quote]
phthon太厉害了
shiter 2012-02-06
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 gdujian0119 的回复:]
赵哥v5……
公式:1024/5+1024/25+1024/125+1024/625
=204 + 40 + 8 + 1 =253
[/Quote]
这种比较好直观
cbzjzsb123 2012-02-06
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 gdujian0119 的回复:]
赵哥v5……
公式:1024/5+1024/25+1024/125+1024/625
=204 + 40 + 8 + 1 =253
[/Quote]这是怎么算的
加载更多回复(15)

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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