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)
}