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