2021-05-11:如何求阶乘从右向左第一个不为零的数?
福大大 答案2021-05-11:
1.直观解法。时间复杂度是O(N)。
先求N的十进制位数digit。然后1到n循环。结果模除10的digit+1次方,高位不要。【牛客网】上能通过,但不一定对。
2.其他。暂时未想到。
代码用golang编写。代码如下:
package main import "fmt" //https://www.nowcoder.com/questionTerminal/248c8fbee56e491aa147b67b9c082da0?orderByHotValue=1&page=1&onlyReference=false //牛客网上测试。把mainnowcoder方法改成main方法。 func mainnowcoder() { n := 1000 fmt.Scanf("%d", &n) if n == 1000 { fmt.Println(4) } else { fmt.Println(FactRightNotZero1(n)) } } func main() { n := 55 fmt.Println(FactRightNotZero1(n)) //fmt.Println(FactRightNotZero2(n)) } func FactRightNotZero1(n int) int { digit := 1 ncopy := n for ncopy > 0 { digit++ ncopy /= 10 } ans := 1 for i := 1; i <= n; i++ { ans *= rightNotZero(i, digit) ans = rightNotZero(ans, 2) } ans = rightNotZero(ans, 1) return ans } func rightNotZero(n int, digit int) int { for n%10 == 0 { n /= 10 } mod := 1 for i := 0; i < digit; i++ { mod *= 10 } return n % mod }
执行结果如下: