Go语言处理超大字符串型整数加减经典面试详解

 更新时间:2023年10月13日 09:06:43   作者:好文收藏  
这篇文章主要为大家介绍了Go语言处理超大字符串型整数加减经典面试示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

int范围

int64所能表示的数字范围为$-2^{63} 到 2^{63}-1$,即·-9223372036854775808~9223372036854775807·,
(19位长度)

当超过这一数字,则会溢出

fmt.Println(9223372036854775808)

执行结果:

constant 9223372036854775808 overflows int

但当有相关需求,如假设π小数点后50位乘以$10^{50}$的值为a1,
e小数点后30位乘以$10^{30}$的值为a2,现需要计算a1+a2,以及a1-a2的值;

即对两个可正可负的字符串型整数str1和str2,计算str1+str2的值

1.当两数皆为正整数

如a1+a2

一些必要操作,如去除最左边的所有0,在代码中不做展现,

默认已通过strings.TrimLeft(str,"0")处理为不是以0开头的正整数

func main(){
    str1 := "314159265358979323846264338327950288419716939937510"
    str2 :=                     "2718281828459045235360287471352"
    rs := ""
    if len(str1) > len(str2) {
        rs = AddStr(str1,str2)
    }  else{
        rs = AddStr(str2,str1)
    }
    fmt.Println(rs)
}
func AddStr(n1,n2 string)(res string) {
    var num []int
    x,y := len(n1),len(n2)
    num = make([]int,x+1) //因为可能存在两个数的最高位相加大于10的情况,故而比两者中最大数的位数+1
    for i :=0;i<y; {
        num[x-i] = int(n1[x-1-i]-'0') + int(n2[y-1-i]-'0')
        i = i + 1
    }
    for i:=0;i<x-y;{
        num[x-y-i] = int(n1[x-y-i-1]-'0')
        i = i + 1
    }
    //处理进位
    for i := len(num);i>1;{
        if num[i-1]/10==1 {
            num[i-1]-=10
            num[i-2]++
        }
        i = i - 1
    }
    //汇总字符串结果
    for _,i := range num{
        s:=strconv.Itoa(i)
        res+=s
    }
    //去除开头可能存在的0
    if len(res) > 1 {
        res = strings.TrimLeft(res,"0")
    }
    return
}

运行结果:

314159265358979323848982620156409333655077227408862

2.当两数可能为负整数

即a1-a2,或a2-a1,或-a1-a2

当两数皆为负数,先把负号取出,这样就和两个正整数相加无异,

最后得出结果再加上负号~

当两数一正一负,

如下代码,默认已做如下处理,a1为正,a2为负,且a1的绝对值>a2的绝对值

func main(){
    str1 := "314159265358979323846264338327950288419716939937510"
    str2 :=                    "-2718281828459045235360287471352"
    str2 = strings.TrimLeft(str2,"-")
    res := subtractStr(str1,str2)
    fmt.Println(res)
}
func subtractStr(n1,n2 string)(res string) {
  var num []int
  x,y := len(n1),len(n2)
  num= make([]int,x+1)
  for i := 0;i < y; {
      num[x-i] = int(n1[x-1-i]-'0') - int(n2[y-1-i]-'0')
      i = i + 1
  }
  for i:=0;i<x-y;{
      num[x-y-i] = int(n1[x-y-i-1]-'0')
      i = i + 1
  }
  //处理进位
  for i := len(num);i>1;{
      if num[i-1] < 0  {
          num[i-1]+=10
          num[i-2]--
      }
      i = i- 1
  }
  //汇总字符串结果
  for _,i := range num{
      s:=strconv.Itoa(i)
      res+=s
  }
  //去除开头可能存在的0
  if len(res) > 1 {
      res = strings.TrimLeft(res,"0")
  }
  return
}

运行结果:

314159265358979323843546056499491243184356652466158

思考:

当str1,str2未必为整数型字符串,而可能是小数型时,该如何处理?

以及超大字符串型整数的乘除问题,如何处理

以上就是Go语言处理超大字符串型整数加减经典面试详解的详细内容,更多关于Go处理超大字符串型整数加减的资料请关注脚本之家其它相关文章!

相关文章

  • 解决golang http.FileServer 遇到的坑

    解决golang http.FileServer 遇到的坑

    这篇文章主要介绍了解决golang http.FileServer 遇到的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • 详解Gotorch多机定时任务管理系统

    详解Gotorch多机定时任务管理系统

    遵循着“学一门语言最好的方式是使用它”的理念,想着用Go来实现些什么,刚好有一个比较让我烦恼的问题,于是用Go解决一下,即使不在生产环境使用,也可以作为Go语言学习的一种方式。
    2021-05-05
  • goroutine 泄漏和避免泄漏实战示例

    goroutine 泄漏和避免泄漏实战示例

    这篇文章主要为大家介绍了goroutine 泄漏和避免泄漏实战示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • golang利用pprof与go-torch如何做性能分析

    golang利用pprof与go-torch如何做性能分析

    这篇文章主要给大家介绍了关于golang利用pprof与go-torch如何做性能分析的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • golang中实现给gif、png、jpeg图片添加文字水印

    golang中实现给gif、png、jpeg图片添加文字水印

    这篇文章主要介绍了golang中实现给gif、png、jpeg图片添加文字水印,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Go设计模式之单例模式图文详解

    Go设计模式之单例模式图文详解

    单例模式是一种创建型设计模式,让你能够保证一个类只有一个实例,并提供一个访问该实例的全局节点,本文就通过图文给大家介绍一下Go的单例模式,需要的朋友可以参考下
    2023-07-07
  • Go语言解决大模型API调用中的超时错误的方法

    Go语言解决大模型API调用中的超时错误的方法

    在开发基于大语言模型(如DeepSeek)的智能应用时,我们常通过API实现自然语言交互,但在处理复杂任务或网络波动时,开发者可能会遭遇 context deadline exceeded错误,本文将以Go语言为例,深入分析该问题的根源,并提供一套完整的优化方案,需要的朋友可以参考下
    2025-05-05
  • GO 使用Webhook 实现github 自动化部署的方法

    GO 使用Webhook 实现github 自动化部署的方法

    这篇文章主要介绍了GO 使用Webhook 实现github 自动化部署的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Go语言开发编程规范命令风格代码格式

    Go语言开发编程规范命令风格代码格式

    这篇文章主要为大家介绍了Go语言开发编程规范命令风格代码格式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • golang使用iconv报undefined:XXX的问题处理方案

    golang使用iconv报undefined:XXX的问题处理方案

    这篇文章主要介绍了golang使用iconv报undefined:XXX的问题处理方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03

最新评论