欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語言處理超大字符串型整數(shù)加減經(jīng)典面試詳解

 更新時(shí)間:2023年10月13日 09:06:43   作者:好文收藏  
這篇文章主要為大家介紹了Go語言處理超大字符串型整數(shù)加減經(jīng)典面試示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

int范圍

int64所能表示的數(shù)字范圍為$-2^{63} 到 2^{63}-1$,即·-9223372036854775808~9223372036854775807·,
(19位長度)

當(dāng)超過這一數(shù)字,則會(huì)溢出

fmt.Println(9223372036854775808)

執(zhí)行結(jié)果:

constant 9223372036854775808 overflows int

但當(dāng)有相關(guān)需求,如假設(shè)π小數(shù)點(diǎn)后50位乘以$10^{50}$的值為a1,
e小數(shù)點(diǎn)后30位乘以$10^{30}$的值為a2,現(xiàn)需要計(jì)算a1+a2,以及a1-a2的值;

即對(duì)兩個(gè)可正可負(fù)的字符串型整數(shù)str1和str2,計(jì)算str1+str2的值

1.當(dāng)兩數(shù)皆為正整數(shù)

如a1+a2

一些必要操作,如去除最左邊的所有0,在代碼中不做展現(xiàn),

默認(rèn)已通過strings.TrimLeft(str,"0")處理為不是以0開頭的正整數(shù)

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) //因?yàn)榭赡艽嬖趦蓚€(gè)數(shù)的最高位相加大于10的情況,故而比兩者中最大數(shù)的位數(shù)+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
    }
    //處理進(jìn)位
    for i := len(num);i>1;{
        if num[i-1]/10==1 {
            num[i-1]-=10
            num[i-2]++
        }
        i = i - 1
    }
    //匯總字符串結(jié)果
    for _,i := range num{
        s:=strconv.Itoa(i)
        res+=s
    }
    //去除開頭可能存在的0
    if len(res) > 1 {
        res = strings.TrimLeft(res,"0")
    }
    return
}

運(yùn)行結(jié)果:

314159265358979323848982620156409333655077227408862

2.當(dāng)兩數(shù)可能為負(fù)整數(shù)

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

當(dāng)兩數(shù)皆為負(fù)數(shù),先把負(fù)號(hào)取出,這樣就和兩個(gè)正整數(shù)相加無異,

最后得出結(jié)果再加上負(fù)號(hào)~

當(dāng)兩數(shù)一正一負(fù),

如下代碼,默認(rèn)已做如下處理,a1為正,a2為負(fù),且a1的絕對(duì)值>a2的絕對(duì)值

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
  }
  //處理進(jìn)位
  for i := len(num);i>1;{
      if num[i-1] < 0  {
          num[i-1]+=10
          num[i-2]--
      }
      i = i- 1
  }
  //匯總字符串結(jié)果
  for _,i := range num{
      s:=strconv.Itoa(i)
      res+=s
  }
  //去除開頭可能存在的0
  if len(res) > 1 {
      res = strings.TrimLeft(res,"0")
  }
  return
}

運(yùn)行結(jié)果:

314159265358979323843546056499491243184356652466158

思考:

當(dāng)str1,str2未必為整數(shù)型字符串,而可能是小數(shù)型時(shí),該如何處理?

以及超大字符串型整數(shù)的乘除問題,如何處理

以上就是Go語言處理超大字符串型整數(shù)加減經(jīng)典面試詳解的詳細(xì)內(nèi)容,更多關(guān)于Go處理超大字符串型整數(shù)加減的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解Go語言變量作用域

    詳解Go語言變量作用域

    這篇文章主要介紹了Go 語言變量作用域的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用go語言,感興趣的朋友可以了解下
    2021-03-03
  • 詳解Go語言中自定義結(jié)構(gòu)體能作為map的key嗎

    詳解Go語言中自定義結(jié)構(gòu)體能作為map的key嗎

    在Go中,引用類型具有動(dòng)態(tài)的特性,可能會(huì)被修改或指向新的數(shù)據(jù),這就引發(fā)了一個(gè)問題—能否將包含引用類型的自定義結(jié)構(gòu)體作為map的鍵呢,本文就來和大家想想講講
    2023-06-06
  • golang架構(gòu)設(shè)計(jì)開閉原則手寫實(shí)現(xiàn)

    golang架構(gòu)設(shè)計(jì)開閉原則手寫實(shí)現(xiàn)

    這篇文章主要為大家介紹了golang架構(gòu)設(shè)計(jì)開閉原則手寫實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 構(gòu)建Golang應(yīng)用最小Docker鏡像的實(shí)現(xiàn)

    構(gòu)建Golang應(yīng)用最小Docker鏡像的實(shí)現(xiàn)

    這篇文章主要介紹了構(gòu)建Golang應(yīng)用最小Docker鏡像的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Go日志框架zap增強(qiáng)及源碼解讀

    Go日志框架zap增強(qiáng)及源碼解讀

    這篇文章主要為大家介紹了Go日志框架zap增強(qiáng)及源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • GoFrame通用類型變量gvar與interface基本使用對(duì)比

    GoFrame通用類型變量gvar與interface基本使用對(duì)比

    這篇文章主要為大家介紹了GoFrame通用類型變量gvar與interface基本使用對(duì)比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • GoLand編譯帶有構(gòu)建標(biāo)簽的程序思路詳解

    GoLand編譯帶有構(gòu)建標(biāo)簽的程序思路詳解

    這篇文章主要介紹了GoLand編譯帶有構(gòu)建標(biāo)簽的程序,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • win10下安裝Go和Goland的詳細(xì)教程

    win10下安裝Go和Goland的詳細(xì)教程

    這篇文章主要介紹了win10下安裝Go和Goland的詳細(xì)教程,本文給大家提到了go和golang之間的區(qū)別,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Go語言中日期包(time包)的具體使用

    Go語言中日期包(time包)的具體使用

    本文主要介紹了Go語言中日期包的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Go?一般方法與接口方法接收者的差異詳解

    Go?一般方法與接口方法接收者的差異詳解

    這篇文章主要為大家介紹了Go?一般方法與接口方法接收者的差異詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05

最新評(píng)論