利用一个数组和一个字符串:
[1, 5, 10, 50, 100, 500, 1000]
'IVXLCDM'
构造一个函数f
, 使得(参考上图):
f(1); // 'I'
f(2); // 'II'
// ...
f(6); // 'VI'
f(7); // 'VII'
// ...
f(800); // 'DCCC'
f(900); // 'CM'
问 有没有更简单的构造法... ?
利用一个数组和一个字符串:
[1, 5, 10, 50, 100, 500, 1000]
'IVXLCDM'
构造一个函数f
, 使得(参考上图):
f(1); // 'I'
f(2); // 'II'
// ...
f(6); // 'VI'
f(7); // 'VII'
// ...
f(800); // 'DCCC'
f(900); // 'CM'
问 有没有更简单的构造法... ?
非常感谢 @czl 的回答。我自己也想到一个完全符合题意的算法:
const f = (num) => {
const Y = 'IVXLCDM';
const X = [1, 5, 10, 50, 100, 500, 1000];
const i = X.findIndex(value => value >= num);
if (X[i] === num) return Y.charAt(i);
const p = i - 2 + i % 2;
if (X[i] - X[p] === num) {
return Y.charAt(p) + Y.charAt(i);
}
let result = i % 2 ? '' : Y.charAt(i - 1);
if (result) num -= X[i - 1];
while (num > 0) {
result += Y.charAt(p);
num -= X[p];
}
return result;
};
13 回答12.8k 阅读
2 回答5.1k 阅读✓ 已解决
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答872 阅读✓ 已解决
6 回答1k 阅读
网上找的 已验证