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 协议 ,转载请注明出处!