[R25A]小Z老师的拼数游戏0
数据规模: 的位数 、 的位数 满足 ,,,且 均不含前导 。
思路
由于 的位数可达 ,远超任何整型范围,直接按字符串处理即可。整体就是一个纯模拟:
- 把 的字符序列反转,得到 ;
- 跳过 开头的所有前导 (但要保留至少一个字符,即 时结果仍是
"0"); - 把处理后的 拼到 的末尾,输出拼接结果。
一个等价但更简洁的观察:跳过前导 等价于「找到第一个非 的位置开始截取;若全为 则取最后一个 」。这样只需一次线性扫描。
复杂度
时间 ,空间 。
仓颉实现
import std.env.*
main(): Int64 {
let reader = getStdIn()
let line = reader.readln().getOrThrow().split(" ", removeEmpty: true)
let a = line[0]
let b = line[1]
// 将 b 翻转得到 b',用字节列表处理
let m = b.size
var arr = Array<UInt8>(m, { _ => 0 })
for (i in 0..m) {
arr[m - 1 - i] = b[i]
}
// 去除前导 0(保留至少一个字符)
var start: Int64 = 0
while (start < m - 1 && arr[start] == 0x30u8) {
start += 1
}
let sb = StringBuilder()
sb.append(a)
var j = start
while (j < m) {
sb.append(Rune(UInt32(arr[j])))
j += 1
}
println(sb.toString())
return 0
}