Advertisement
Guest User

Untitled

a guest
Jul 18th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.47 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "fmt"
  5.     "strconv"
  6.     "strings"
  7. )
  8.  
  9. type bign []int8
  10.  
  11. func main() {
  12.     var n int
  13.     fmt.Printf("> ")
  14.     fmt.Scanf("%d", &n)
  15.     a, err := assign("1")
  16.     if err != nil {
  17.         panic(err)
  18.     }
  19.     for i := 2; i <= n; i++ {
  20.         a = mult(a, i)
  21.     }
  22.     /*for i := 0; i < ; i++ {
  23.         a = mult(a, 2)
  24.     }*/
  25.     //a = mult(a, 50)
  26.     fmt.Println(out(a))
  27. }
  28.  
  29. func add(a bign, b bign) bign {
  30.     c, _ := assign("0")
  31.     p := new(bign)
  32.     if len(a) > len(b) {
  33.         p = &a
  34.         for i := 0; i < len(a)-len(b); {
  35.             b = append(b, 0)
  36.         }
  37.     } else {
  38.         p = &b
  39.         for i := 0; i < len(b)-len(a); {
  40.             a = append(a, 0)
  41.         }
  42.     }
  43.     for i := range *p {
  44.         if len(c) == i+1 {
  45.             c[i] += a[i] + b[i]
  46.         } else {
  47.             c = append(c, a[i]+b[i])
  48.         }
  49.         if c[i] >= 10 {
  50.             c = append(c, (c[i]-c[i]%10)/10)
  51.             c[i] = c[i] % 10
  52.         }
  53.     }
  54.     return c
  55. }
  56. func mult(a bign, b int) bign {
  57.     var c bign
  58.     for i := 0; i < b; i++ {
  59.         c = add(c, a)
  60.     }
  61.     return c
  62. }
  63.  
  64. // a := assign("1 009 589")
  65. // fmt.Println(a)    Output: [9, 8, 5, 9, 0, 0, 1]
  66. func assign(n string) (bign, error) {
  67.     n = strings.Replace(n, " ", "", -1)
  68.     num := []rune(n)
  69.     c := make(bign, 0)
  70.     for i := len(num) - 1; i >= 0; i-- {
  71.         a, err := strconv.Atoi(string(num[i]))
  72.         c = append(c, int8(a))
  73.         if err != nil {
  74.             var d bign
  75.             return d, err
  76.         }
  77.     }
  78.     return c, nil
  79. }
  80.  
  81. func out(a bign) string {
  82.     var s string
  83.     for i := len(a) - 1; i >= 0; i-- {
  84.         if (i+1)%3 == 0 && i != len(a)-1 {
  85.             s += " "
  86.         }
  87.         s += fmt.Sprint(a[i])
  88.     }
  89.     return s
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement