Guest User

Untitled

a guest
Feb 18th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.59 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "strconv"
  6. "strings"
  7. )
  8.  
  9. func getSumCarry(a int, b int, c int) (int, int) {
  10. if a+b+c < 10 {
  11. return a + b + c, 0
  12. }
  13. return (a + b + c) - 10, 1
  14. }
  15.  
  16. type List struct {
  17. val int
  18. len int
  19. next *List
  20. }
  21.  
  22. func (l *List) num2list(num int) *List {
  23. sNum := strings.Split(fmt.Sprintf("%d", num), "")
  24.  
  25. val, _ := strconv.Atoi(sNum[len(sNum)-1])
  26. l = &List{val: val, len: 0, next: nil}
  27.  
  28. for id := len(sNum) - 2; id >= 0; id -- {
  29. val, _ = strconv.Atoi(sNum[id])
  30.  
  31. for lst := l; lst != nil; lst = lst.next {
  32. if lst.next == nil {
  33. l.len ++
  34. lst.next = &List{val: val, len: l.len, next: nil}
  35. break
  36. }
  37. }
  38. }
  39. return l
  40. }
  41.  
  42. func allign(a *List, b *List) {
  43. longest := 0
  44. adjust := a
  45. if a.len > b.len {
  46. longest = a.len
  47. adjust = b
  48. } else if b.len > a.len {
  49. longest = b.len
  50. } else {
  51. return
  52. }
  53.  
  54. for i := longest; i >= 0; i -- {
  55. for lst := adjust; lst != nil; lst = lst.next {
  56. if lst.next == nil {
  57. adjust.len ++
  58. lst.next = &List{val: 0, len: adjust.len, next: nil}
  59. break
  60. }
  61. }
  62. }
  63.  
  64. return
  65. }
  66.  
  67. func sumList(a *List, b *List) *List {
  68. carry := 0
  69. aNext := a
  70. bNext := b
  71.  
  72. for i := a.len; i >= 0; i -- {
  73. bNext.val, carry = getSumCarry(aNext.val, bNext.val, carry)
  74. bNext = bNext.next
  75. aNext = aNext.next
  76. }
  77.  
  78. return b
  79. }
  80.  
  81. func main() {
  82. LList := List{}
  83. first := LList.num2list(342)
  84. secnd := LList.num2list(465)
  85.  
  86. result := sumList(first, secnd)
  87. fmt.Println(result.val, result.next.val, result.next.next.val)
  88.  
  89. f := LList.num2list(199)
  90. s := LList.num2list(1)
  91.  
  92. allign(f, s)
  93.  
  94. result = sumList(f, s)
  95. fmt.Println(result.val, result.next.val, result.next.next.val)
  96.  
  97. }
Add Comment
Please, Sign In to add comment