12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- // The exponential of 11
- // 3fsv3 - collabedit.com
- package main
- import "fmt"
- // Node ...
- type Node struct {
- val int
- next *Node
- }
- func reverse(head *Node) *Node {
- if head == nil || head.next == nil {
- return head
- }
- dummy := Node{-1, nil}
- tail := head.next
- for tail != nil {
- tmp := tail.next
- tail.next = dummy.next
- dummy.next = tail
- tail = tmp
- }
- head.next = dummy.next
- return head
- }
- func pow(n int) string {
- base := []byte{'1', '1'}
- res := []byte{'1'}
- for n != 0 {
- if n&1 == 1 {
- res = mul(res, base)
- }
- base = mul(base, base)
- n >>= 1
- }
- for l, r := 0, len(res)-1; l < r; l, r = l+1, r-1 {
- res[l], res[r] = res[r], res[l]
- }
- return string(res)
- }
- func mul(a, b []byte) []byte {
- m, n := len(a), len(b)
- c := make([]byte, m+n)
- for i := range c {
- c[i] = '0'
- }
- for i := 0; i < m; i++ {
- for j := 0; j < n; j++ {
- res := (a[i] - '0') * (b[j] - '0')
- c[i+j] += res
- }
- }
- mod := 0
- for i := 0; i < len(c); i++ {
- c[i] += byte(mod)
- mod = int(c[i]-'0') / 10
- c[i] = byte(int(c[i]-'0')%10 + '0')
- }
- i := m + n
- for ; 1 <= i; i-- {
- if c[i-1] != '0' {
- break
- }
- }
- if i == 0 {
- return c[:i+1]
- }
- return c[:i]
- }
- func main() {
- fmt.Println(pow(9999))
- }
|