Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "strconv"
- "strings"
- )
- type bign []int8
- func main() {
- var n int
- fmt.Printf("> ")
- fmt.Scanf("%d", &n)
- a, err := assign("1")
- if err != nil {
- panic(err)
- }
- for i := 2; i <= n; i++ {
- a = mult(a, i)
- }
- /*for i := 0; i < ; i++ {
- a = mult(a, 2)
- }*/
- //a = mult(a, 50)
- fmt.Println(out(a))
- }
- func add(a bign, b bign) bign {
- c, _ := assign("0")
- p := new(bign)
- if len(a) > len(b) {
- p = &a
- for i := 0; i < len(a)-len(b); {
- b = append(b, 0)
- }
- } else {
- p = &b
- for i := 0; i < len(b)-len(a); {
- a = append(a, 0)
- }
- }
- for i := range *p {
- if len(c) == i+1 {
- c[i] += a[i] + b[i]
- } else {
- c = append(c, a[i]+b[i])
- }
- if c[i] >= 10 {
- c = append(c, (c[i]-c[i]%10)/10)
- c[i] = c[i] % 10
- }
- }
- return c
- }
- func mult(a bign, b int) bign {
- var c bign
- for i := 0; i < b; i++ {
- c = add(c, a)
- }
- return c
- }
- // a := assign("1 009 589")
- // fmt.Println(a) Output: [9, 8, 5, 9, 0, 0, 1]
- func assign(n string) (bign, error) {
- n = strings.Replace(n, " ", "", -1)
- num := []rune(n)
- c := make(bign, 0)
- for i := len(num) - 1; i >= 0; i-- {
- a, err := strconv.Atoi(string(num[i]))
- c = append(c, int8(a))
- if err != nil {
- var d bign
- return d, err
- }
- }
- return c, nil
- }
- func out(a bign) string {
- var s string
- for i := len(a) - 1; i >= 0; i-- {
- if (i+1)%3 == 0 && i != len(a)-1 {
- s += " "
- }
- s += fmt.Sprint(a[i])
- }
- return s
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement