• 面试题2


    总体内容

    编写程序,在终端输出九九乘法表

    2、一个数如果恰好等于它的因子之和,这个数就是完数,如:6=1+2+3,变成找出1000以内的所有完数

    3、输入一个字符串,判断是否为回文,回文字符串是指从左到右读和从右到左读完全相同的字符串

    4、输入一行字符,分别统计出英文字母、空格、数字和其他字符的个数

    5、计算两个大数相加的和,这两个大数会超过int64的范围

    1、打印九九乘法表

    package main
    
    import(
       "fmt"
    )
    
    func multi(){
       for i:=0;i<9;i++{   //控制行数
          for j:=0;j<=i;j++{    //控制列数
             fmt.Printf("%d*%d=%d	",i+1,j+1,(i+1)*(j+1))
          }
          fmt.Println()
       }
    }
    
    func main(){
       multi()
    }
    D:project>go build go_dev/day4/work/jiujiu
    
    D:project>jiujiu.exe
    1*1=1
    2*1=2   2*2=4
    3*1=3   3*2=6   3*3=9
    4*1=4   4*2=8   4*3=12  4*4=16
    5*1=5   5*2=10  5*3=15  5*4=20  5*5=25
    6*1=6   6*2=12  6*3=18  6*4=24  6*5=30  6*6=36
    7*1=7   7*2=14  7*3=21  7*4=28  7*5=35  7*6=42  7*7=49
    8*1=8   8*2=16  8*3=24  8*4=32  8*5=40  8*6=48  8*7=56  8*8=64
    9*1=9   9*2=18  9*3=27  9*4=36  9*5=45  9*6=54  9*7=63  9*8=72  9*9=81
    

    2、一个数如果恰好等于它的因子之和,这个 数就成之为完数。如6=1+2+3.找出1000以内所有完数

    package main
    
    import(
       "fmt"
    )
    
    func perfect(n int)bool{
       var sum int =0
       for i:=1;i<n;i++{  
          if n%i==0{
             sum+=i
          }
       }
       return n==sum
    }
    
    func process(n int) {//遍历输入的数
       for i:=1;i<n+1;i++{  //注意这里有个i++,也就是说如果输入1000,那么i的结果是1001
          if perfect(i){    //这里又是一种逻辑,所以可以单独区分出来
             fmt.Println(i)
          }
       }
    }
    
    func main(){
       var n int
       fmt.Scanf("%d",&n)
       process(n)
    }
    D:project>go build go_dev/day4/work/wanshu
    
    D:project>wanshu.exe
    1000
    6
    28
    496
    这个题目的思路:
    首先遍历输入的 数,然后遍历遍历的数,让其满足与因数取余是否等于0
    

    3、输入一个字符串,判断其是否是回文,回文字符串从左到右读和从右到左读完全一样的字符串

    此题思路:首先获取输入的字符,然后把字符转化为字符列表,不是字节(因为中英文关系)然后进行遍历获取下标,进行取中判断,如果下标到中间,然后就退出,然后进行首尾下标值进行判断。
    package main
    
    import (
       "fmt"
    )
    
    func process(str string)bool{
       t:=[]rune(str) //把str转化为字符的列表
       length:=len(t)
       for i,_:=range t{
          if i==length/2{
             break
          }
          last:=length-i-1
          if t[i] != t[last]{
             return false
          }
       }
       return true
    }
    
    func main(){
       var str string
       fmt.Scanf("s",&str)
       if process(str){
          fmt.Println("yes")
       }else{
          fmt.Println("no")
       }
    }
    D:project>go build go_dev/day4/work/huiwen
    
    D:project>huiwen.exe
    131abc啊啊cba131
    yes
    

    4、输入一行字符,分别统计其中英文字母、空格、数字和其他字符的个数 

    package main
    
    import(
       "fmt"
       "bufio"
       "os"
    )
    
    func count(str string)(worldcount,spacecount,numbercount,othercount int){
       t:=[]rune(str)
       for _,v:=range t{
          switch{
          case v>='a'&&v<='z':
             fallthrough
          case v>='A'&& v<='Z':
             worldcount++
          case v== ' ' :
             spacecount++
          case v>='0'&&v<='9':
             numbercount++
          default:
             othercount++
          }
       }
       return
    }
    
    func main(){  //注意字符都是单引号
       reader:=bufio.NewReader(os.Stdin)  //把标准输入通过接口到缓冲区
       result,_,err:=reader.ReadLine()  //读取结果,bool,错误处理
       if err!=nil{
          fmt.Println("read from console err:",err)
          return
       }
       wc,sc,nc,oc:=count(string(result))
       fmt.Printf("word:%d
     space:%d
     number:%d
     other:%d
    ",wc,sc,nc,oc)
    }
    D:project>go build go_dev/day4/work/tongji
    
    D:project>tongji.exe
    123
    word:0
     space:0
     number:3
     other:0
    

      

    重点

    5、计算两个大数相加的和。这两个大数会超过int64的表示范围

    package main
    
    import (
       "bufio"
       "fmt"
       "os"
       "strings"
    )
    
    func multi(str1, str2 string) (result string) {
    
       if len(str1) == 0 && len(str2) == 0 {  //都等于0的时候退出
          result = "0"
          return
       }
    
       var index1 = len(str1) - 1             //获取最大的下标
       var index2 = len(str2) - 1
       var left int                           //表示逢10进一
    
       //遍历最小的串
       for index1 >= 0 && index2 >= 0 {  //这里遍历,两个字符末尾相加。遍历最小的串
          c1 := str1[index1] - '0'   //0表示50,9表示50在assci中,相减刚好得到数字
          c2 := str2[index2] - '0'
    
          sum := int(c1) + int(c2) + left  //注意这里要转换成整形
          if sum >= 10 {
             left = 1
          } else {
             left = 0
          }
          c3 := (sum % 10) + '0'            //取余,这里回归assci表示的字符
          result = fmt.Sprintf("%c%s", c3, result)//这里第二个参数是接口
          index1--
          index2--
       }
    
       //下面两个for循环是来判断两个字符串字符多的那个字符串的操作
       for index1 >= 0 {
          c1 := str1[index1] - '0'
          sum := int(c1) + left
          if sum >= 10 {
             left = 1
          } else {
             left = 0
          }
          c3 := (sum % 10) + '0'
    
          result = fmt.Sprintf("%c%s", c3, result)
          index1--
       }
    
       for index2 >= 0 {
          c1 := str2[index2] - '0'
          sum := int(c1) + left
          if sum >= 10 {
             left = 1
          } else {
             left = 0
          }
          c3 := (sum % 10) + '0'
          result = fmt.Sprintf("%c%s", c3, result) //%c是格式化unicode表示字符
          index2--
       }
    
       //下面的if是判断,如果两个字符串相加之后比如99和1,这两个相加,那么就会变成100,也就是说到最后left还等于1的时候就是这种情况
       if left == 1 {
          result = fmt.Sprintf("1%s", result)
       }
       return
    }
    
    func main() {
       reader := bufio.NewReader(os.Stdin)
       result, _, err := reader.ReadLine()
       if err != nil {
          fmt.Println("read from console err:", err)
          return
       }
    
       strSlice := strings.Split(string(result), "+")  //切片
       if len(strSlice) != 2 {
          fmt.Println("please input a+b")
          return
       }
    
       strNumber1 := strings.TrimSpace(strSlice[0])
       strNumber2 := strings.TrimSpace(strSlice[1])
       fmt.Println(multi(strNumber1, strNumber2))
    }
    

      

  • 相关阅读:
    Node.js 回调函数
    算法二、
    一、Perfect Squares 完全平方数
    Never Go Away
    python 内置方法
    web框架详解之tornado 三 url和分页
    web框架详解之tornado 二 cookie
    前端各种插件
    AJAX请求时status返回状态明细表
    LR之-参数化
  • 原文地址:https://www.cnblogs.com/pyrene/p/8094228.html
Copyright © 2020-2023  润新知