天天看點

【Go語言入門100題】006 連續因子 (20 分) Go語言|Golang

L1-006 連續因子 (20 分) Go語言|Golang

一個正整數 N 的因子中可能存在若幹連續的數字。例如 630 可以分解為 3×5×6×7,其中 5、6、7 就是 3 個連續的數字。給定任一正整數 N,要求編寫程式求出最長連續因子的個數,并輸出最小的連續因子序列。

輸入格式:

輸入在一行中給出一個正整數 N(1<N<2e31)

輸出格式:

首先在第 1 行輸出最長連續因子的個數;然後在第 2 行中按 因子1因子2……*因子k 的格式輸出最小的連續因子序列,其中因子按遞增順序輸出,1 不算在内。

輸入樣例:

630      

結尾無空行

輸出樣例:

3
5*6*7
      

思路:

因為是連續的,是以我們隻需找到第一個數字就行了,不過要記錄一下一共有多少個這樣的連續數字。最後連環輸出就可以了。

但是!!!我隻拿了18分。。。嗚嗚嗚。。希望能有大佬幫我看看為啥我第四個測試點過不了。。

代碼如下:

package main

import (
    "fmt"
    "math"
)

func main() {
    var N int
    var tmp int
    length := 0
    first := 0
    _,_ = fmt.Scan(&N)
    for i := 2; i <= int(math.Sqrt(float64(N)))+1; i++ {    // 使用開方,減少循環次數,注意類型的
        var j int
        tmp = 1
        for j=i ; j<=int(math.Sqrt(float64(N)))+1; j++ {    // 使用開方,減少循環次數,注意類型的
            tmp *= j
            if N % tmp!=0 {
                break
            }
            if j-i>length {
                length  = j-i
                first = i
            }
        }
    }
    if first == 0 {         //特殊情況的考慮
        fmt.Printf("1\n%d",N)
    }else{
        fmt.Printf("%d",length +1)
        fmt.Printf("\n%d",first)
        for i := 1;i<=length ; i++ {
            fmt.Printf("*%d",first+i)
        }
    }
}