【发布时间】:2014-09-10 11:43:02
【问题描述】:
我正在尝试编写一个代码来计算特定数字(大数)的阶乘中尾随零的数量。但是,对于小数字,我得到了正确的结果,但对于大数字,偏差不断增加。我的逻辑有什么问题
#include <stdio.h>
int main(void) {
int t;
scanf("%d", &t);
while (t > 0) {
int factorten = 0, factorfive = 0, factortwo = 0, remainingfive = 0,
remainingtwo = 0;
unsigned int factors = 0;
unsigned int n;
scanf("%u", &n);
for (unsigned int i = n; i > 0; i--) {
if (i % 10 == 0) {
factorten++;
continue;
} else if (i % 5 == 0) {
factorfive++;
continue;
} else if (i % 2 == 0) {
// int new = i;
// while(new % 2 == 0)
//{
// new = new / 2;
factortwo++;
//}
continue;
}
}
factors = factors + factorten;
printf("%u\n", factors);
if (factorfive % 2 == 0 && factorfive != 0) {
factors = factors + (factorfive / 2);
} else {
remainingfive = factorfive % 2;
factors = factors + ((factorfive - remainingfive) / 2);
}
printf("%u\n", factors);
if (factortwo % 5 == 0 && factortwo != 0) {
factors = factors + (factortwo / 5);
} else {
remainingtwo = factortwo % 5;
factors = factors + ((factortwo - remainingtwo) / 5);
}
printf("%u\n", factors);
if ((remainingfive * remainingtwo % 10) == 0 &&
(remainingfive * remainingtwo % 10) != 0) {
factors++;
}
printf("%u\n", factors);
t--;
}
}
示例输入:
6
3
60
100
1024
23456
8735373
样本输出:
0
14
24
253
5861
2183837
我的输出
0
13
23
235
5394
2009134
【问题讨论】:
-
出了什么问题?
-
对于最多 3 位数字,我的结果比实际值少 1,并且从那里它会出现很大程度的错误
-
另外,您需要计算重复因素。 4 应该对 factortwo 贡献两个,而不仅仅是一个。您有(注释掉)代码来执行此操作,但您也需要 5 和 10 的类似代码。
-
三位数表示你得到 100,即 10*10,所以需要数 2 才能分解
-
代码太糟糕了。
标签: c