javascript - C++ 到 javascript 的转换
问题描述
我正在做的问题是:
编写一个 JavaScript 程序来创建一个函数,该函数返回将给定数字替换为数字之和所需的次数,直到它转换为单个数字。就像给定的数字是 123 一样,将其转换为单个数字所需的次数是 1 (1+2+3=6)。您的输出代码应采用格式 console.log("Result is ", variableName)
我找不到这个问题的解决方案,所以我用谷歌搜索并找到了这个页面。
此页面上的代码是 C/C++、Java 等...我拿了 C++ 代码并尝试自己将其转换为 javascript,结果如下:
var num=prompt("Enter a number");
var a= num.toString();
function test(x)
{var temporary_sum = 0, count = 0;
while (x.length() > 1)
{
temporary_sum = 0;
// computing sum of its digits
for (var i = 0; i < x.length(); i++)
temporary_sum += ( x[ i ] - '0' ) ;
// converting temporary_sum into string
// x again .
x = temporary_sum.toString() ;
// increase the count
count++;
}
return count;
}
var output = test(a) ;
console.log("Result is: ", output);
此代码根本不提供任何输出。我怎样才能解决这个问题?有没有更好的方法来回答这个问题?
解决方案
这是使用递归的更好方法。和reduce
function test(x,count=0){
if(String(x).length === 1) return count;
let sum = String(x).split('').reduce((ac,a) => Number(a) + ac,0);
return test(sum,++count);
}
console.log(test(123)) //1
console.log(test(456)) //2
console.log(test(99999999999)) //3
推荐阅读
- c - 在具有外部链接的内联函数中引用静态对象
- django - Djongo重新定义了ArrayModelField的结构
- ada - Array(Array'First) "数组索引检查可能失败"
- python - 子类构造函数抛出 TypeError:__init__() 接受 2 个位置参数,但给出了 5 个
- node.js - 为 Azure 应用服务上的节点配置默认文档
- php - Laravel 搜索;按外部表过滤,然后再次使用本地表过滤结果
- php - basiclatin 和 1supplement 的 php 字符串验证
- android - Android 为什么在 RecyclerView 中使用 executePendingBindings
- java - iText Acroform 问题
- circuit-sdk - 使用本地公司帐户连接到 Circuit API