tasks a-s
This commit is contained in:
parent
47bf37c096
commit
b83f433714
12433 changed files with 156208 additions and 123 deletions
46
Task/Polynomial-long-division/Go/polynomial-long-division.go
Normal file
46
Task/Polynomial-long-division/Go/polynomial-long-division.go
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
n := []float64{-42, 0, -12, 1}
|
||||
d := []float64{-3, 1}
|
||||
fmt.Println("N:", n)
|
||||
fmt.Println("D:", d)
|
||||
q, r, ok := pld(n, d)
|
||||
if ok {
|
||||
fmt.Println("Q:", q)
|
||||
fmt.Println("R:", r)
|
||||
} else {
|
||||
fmt.Println("error")
|
||||
}
|
||||
}
|
||||
|
||||
func degree(p []float64) int {
|
||||
for d := len(p) - 1; d >= 0; d-- {
|
||||
if p[d] != 0 {
|
||||
return d
|
||||
}
|
||||
}
|
||||
return -1
|
||||
}
|
||||
|
||||
func pld(nn, dd []float64) (q, r []float64, ok bool) {
|
||||
if degree(dd) < 0 {
|
||||
return
|
||||
}
|
||||
nn = append(r, nn...)
|
||||
if degree(nn) >= degree(dd) {
|
||||
q = make([]float64, degree(nn)-degree(dd)+1)
|
||||
for degree(nn) >= degree(dd) {
|
||||
d := make([]float64, degree(nn)+1)
|
||||
copy(d[degree(nn)-degree(dd):], dd)
|
||||
q[degree(nn)-degree(dd)] = nn[degree(nn)] / d[degree(d)]
|
||||
for i := range d {
|
||||
d[i] *= q[degree(nn)-degree(dd)]
|
||||
nn[i] -= d[i]
|
||||
}
|
||||
}
|
||||
}
|
||||
return q, nn, true
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue