4425 改变数字(模拟)

1. 问题描述:

给定一个正整数 x,你可以对其各个数位上的数字进行反转操作。反转操作是指将一个数 t 替换为 9−t,请你计算,通过一系列的反转操作(也可以不进行任何操作),能够将 x 转换为的最小可能正整数,注意,最终数字不能以 0 开头。

输入格式

一个正整数 x

输出格式

一个正整数,表示可以得到的最小可能正整数

数据范围

所有测试点满足 1 ≤ x ≤ 10 ^ 18

输入样例1:

27

输出样例1:

22

输入样例2:

9

输出样例2:

9

输入样例3:

91730629

输出样例3:

91230320
来源:https://www.acwing.com/problem/content/description/4428/

2. 思路分析:

分析题目可以知道当某一位大于等于 5 之后那么应该翻转一下,而对于首位则需要特判一下,判断是否是替换后是否是 0,如果是 0 那么就需要将其换为 9,依次枚举每一位模拟整个过程即可。

3. 代码如下:

python:

if __name__ == '__main__':
    n = int(input())
    nums = list()
    while n > 0:
        nums.append(n % 10)
        n //= 10
    res = 0
    for i in range(len(nums) - 1, -1, -1):
        x = nums[i]
        if x >= 5:
            x = 9 - x
            if i == len(nums) - 1 and x == 0: x = 9
        res = res * 10 + x
    print(res)

go:

package main

import "fmt"

func main() {
	// go语言int如果在64位上运行是64位, 如果在32位的机器上运行是32位
	var n int64
	fmt.Scan(&n)
	var nums []int
	for n > 0 {
		nums = append(nums, int(n%10))
		n /= 10
	}
	res := 0
	for i := len(nums) - 1; i >= 0; i-- {
		x := nums[i]
		if x >= 5 {
			x = 9 - x
			if i == len(nums)-1 && x == 0 {
				x = 9
			}
		}
		res = res*10 + x
	}
	fmt.Println(res)
}