总体内容
编写程序,在终端输出九九乘法表
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)) }