1002 写出这个数
写出这个数
题目描述:
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
思路:
思路还是很简单的,用string接受,然后一位位加起来成sum,最后把sum转化成切片,再转化成中文输出(这一步用map会更好)写’jiu‘的时候写成了’qiu‘,卡了我半天,我是憨批,而且写的很冗长,比较烂
代码:
package main
import (
"fmt"
"math"
"strconv"
)
func main() {
var s string
var sum int
fmt.Scanf("%s",&s)
//转化成合数
for i:=0;i<len(s);i++{
sum=sum+int(s[i]-'0')
}
sumLen:=len(strconv.Itoa(sum))
sumSlice:=make([]int,sumLen)
//转换成切片
for i:=sumLen;i>0;i--{
sumSlice[sumLen-i]=sum / int(math.Pow(10,float64 (i)-1)) %10
}
//fmt.Println(sumSlice)
switch (sumSlice[0]) {
case 0: fmt.Print("ling")
break
case 1: fmt.Print("yi")
break
case 2: fmt.Print("er")
break
case 3: fmt.Print("san")
break
case 4: fmt.Print("si")
break
case 5: fmt.Print("wu")
break
case 6: fmt.Print("liu")
break
case 7: fmt.Print("qi")
break
case 8: fmt.Print("ba")
break
case 9: fmt.Print("jiu")
break
}
for i:=1;i<sumLen;i++{
switch (sumSlice[i]) {
case 0: fmt.Print(" ling")
break
case 1: fmt.Print(" yi")
break
case 2: fmt.Print(" er")
break
case 3: fmt.Print(" san")
break
case 4: fmt.Print(" si")
break
case 5: fmt.Print(" wu")
break
case 6: fmt.Print(" liu")
break
case 7: fmt.Print(" qi")
break
case 8: fmt.Print(" ba")
break
case 9: fmt.Print(" jiu")
break
}
}
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!