链接:https://ac.nowcoder.com/acm/contest/59248/A 来源:牛客网 人类数字是十进制的,因为人类有十根手指。 可达鸭数字是三进制的,因为可达鸭有三根呆毛。 与人类一样,可达鸭在书写数字的时候也是从左到右、从高位到低位。 不同于人类,可达鸭数学中只有三个数字:`w`、`m`、`b`,分别代表人类数学中的`1`、`-1`、`0`。 例如,可达鸭数字wmb换算成人类数字为: ( 1 ) × 3 2 + ( − 1 ) × 3 1 + ( 0 ) × 3 0 = 6 (1)×3 2 +(−1)×3 1 +(0)×3 0 =6,所以,wmb=6。 同理,我们有: wmbbb=54 mbw=-8 wmbwwmw=520 wbmbmmbm=1907 mbwmbbwm=-2023 …… 可达鸭很喜欢数学,为此他特意报名了今年下半年的国际宝可梦算数大赛(International Contest of Pokémon Calculation,简称 ICPC),但是他看不懂人类数字。作为他的好朋友,请你帮他把人类数字翻译成可达鸭数字。用Java 语言解决
时间: 2024-03-04 14:52:36 浏览: 86
好的,以下是Java代码实现将人类数字转换为可达鸭数字的计算过程:
```
public static String toDuckNumber(int humanNumber) {
StringBuilder sb = new StringBuilder();
while (humanNumber != 0) {
int remainder = humanNumber % 3;
humanNumber /= 3;
if (remainder == 1) {
sb.append('w');
} else if (remainder == -1) {
sb.append('m');
humanNumber++;
} else {
sb.append('b');
}
}
if (sb.length() == 0) {
sb.append('b');
}
return sb.reverse().toString();
}
```
这段代码中,我们首先定义了一个 `StringBuilder` 对象 `sb` 来存储最终的可达鸭数字,然后进入一个循环,只要人类数字不为 0,就继续进行以下操作:
1. 计算人类数字除以 3 的余数 `remainder`,并将人类数字除以 3 的商作为新的人类数字。
2. 如果余数为 1,则将 `w` 添加到 `sb` 中。
3. 如果余数为 -1,则将 `m` 添加到 `sb` 中,并将人类数字加 1。
4. 如果余数为 0,则将 `b` 添加到 `sb` 中。
遍历完毕后,我们还需要进行一些特殊处理:
1. 如果 `sb` 中没有任何字符,说明人类数字为 0,此时我们在 `sb` 中添加一个 `b`。
2. 最后我们将 `sb` 反转并转换为字符串,返回即可。
例如,传入参数为整数 `6`,代表人类数字 `6`,则调用 `toDuckNumber(6)` 方法后会返回字符串 `"wmb"`,代表可达鸭数字 `wmb`。
阅读全文