题解 | 复读机

复读机

https://www.nowcoder.com/practice/9d381551b6ab40c4b5c3c8d60fe4066e

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	// 创建扫描器读取标准输入,按行分割(对应Python的for line in sys.stdin)
	scanner := bufio.NewScanner(os.Stdin)
	for scanner.Scan() {
		line := scanner.Text() // 获取当前行内容(已去除换行符)
		// 按空白字符分割(等价于Python的split()),取第一个元素
		fields := strings.Fields(line)
		if len(fields) == 0 {
			continue // 空行直接跳过(避免原Python代码中split()空列表取[0]报错的情况)
		}
		a := fields[0]

		// 判断是否包含小数点(等价于Python的 '.' in a)
		if strings.Contains(a, ".") {
			// 转换为浮点数并保留1位小数输出(等价于Python的format(float(a), '.1f'))
			num, err := strconv.ParseFloat(a, 64)
			if err == nil { // 仅处理合法浮点数(与原Python行为一致,非法格式会报错)
				fmt.Printf("%.1f\n", num)
			} else {
				// 若包含小数点但不是合法浮点数(如"123.a"),原Python会抛异常,此处保持一致(直接打印原内容或报错均可,按原逻辑选择打印原内容)
				fmt.Println(a)
			}
		} else {
			// 无小数点,直接输出原内容(等价于Python的print(a))
			fmt.Println(a)
		}
	}

	// 检查输入读取过程中的IO错误(如输入流中断)
	if err := scanner.Err(); err != nil {
		fmt.Fprintf(os.Stderr, "读取输入错误: %v\n", err)
	}
}

全部评论

相关推荐

想做乐观锁:都不用AI,咱们都古法编程吧,让节奏慢一点
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务