我正在尝试解决一个问题,即用户输入文本,然后我必须将文本转换为给定的数值,除非答案是一位数字,否则将它们加在一起。
到目前为止,我已经能够获取输入,将它们转换为给定的数字并将它们存储在数组中。但是我不知道下一步该怎么做。我将如何将这些值加在一起,直到剩下一个数字。
var values = {a:1,b:2,c:3,d:4,e:5,f:6,g:7,h:8,i:9,j:10,k:11,l:12,m:13,n:14,o:15,p:16,q:17,r:18,s:19,t:20,u:21,v:22,w:23,x:24,y:25,z:26};
var someText = prompt('');
someText = someText.trim();
someText = someText.match(/\S/g);
var result = "";
for (i = 0; i < someText.length; i++) {
result += values[someText[i]];
}
alert(result);
例如,如果输入为“动作”,则数值为 => 1.3.20.9.15.14。 -将这些值加在一起。 1 + 3 + 20 + 9 + 15 + 14答案将是62。 -由于答案是2位数字,因此我们再次添加数字 例如62 = 6 + 2 = 8。
注意: 如果答案大于1位数字,例如199 => 1 + 9 + 9 => 19 => 1 + 9 => 10 = 1 + 0 = 1。 答案必须始终是一个数字。
答案 0 :(得分:0)
您可以使用reduce()
来获取字符串的所有数字之和。如果结果为一位数字,则返回该数字,否则以递归方式调用该函数。
您也不需要使用字母值对对象进行硬编码。只需使用reduce()
和chatCodeAt
来生成一串数字即可。
var someText = prompt('').trim().toLowerCase().match(/\S/g)
let result = someText.reduce((ac,a) => ac + (a.charCodeAt(0) - 96),'');
function findSum(num){
if(num.length === 1) return num;
else return findSum(String(num.split('').reduce((ac,a) => ac + +a,0)))
}
console.log(findSum(result))
答案 1 :(得分:0)
您可以按照以下方式进行操作:
var values = {a:1,b:2,c:3,d:4,e:5,f:6,g:7,h:8,i:9,j:10,k:11,l:12,m:13,n:14,o:15,p:16,q:17,r:18,s:19,t:20,u:21,v:22,w:23,x:24,y:25,z:26};
var someText = prompt('');
someText = someText.trim();
someText = someText.match(/\S/g);
var result = "";
for (i = 0; i < someText.length; i++) {
result += values[someText[i]];
}
// While the result is >9, which means that there's more than 1 digit
while(result > 9) {
// Cast result as String, so we can use charAt()
var stringedResult = String(result);
// Reset our result var, because we're going to recalculate it
result = 0;
// For each int in our result, we add them up (ex. 621 = 6+2+1)
for(var i=0; i<stringedResult.length; i++) {
// Cast the stringed result back to a number, and add it to our result variable
result += Number(stringedResult.charAt(i));
}
}
alert(result);
答案 2 :(得分:0)
您应该使用函数对值求和并返回一个数字的值,否则请调用自身:
var values = {a:1,b:2,c:3,d:4,e:5,f:6,g:7,h:8,i:9,j:10,k:11,l:12,m:13,n:14,o:15,p:16,q:17,r:18,s:19,t:20,u:21,v:22,w:23,x:24,y:25,z:26};
var someText = prompt('');
someText = someText.match(/\S/g);
var result = 0;
function getSum(string) {
for (i = 0; i < string.length; i++) {
if (isNaN(string[i])) {
result += values[string[i]];
} else {
result += parseInt(string[i]);
}
}
if (result.toString().length > 1) {
var aux = result.toString();
result = 0;
return getSum(aux);
} else {
return result;
}
}
alert(getSum(someText));