Given a non-negative integer num
, repeatedly add all its digits until the result has only one digit.
For example:
Given num = 38
, the process is like: 3 + 8 = 11
, 1 + 1 = 2
. Since 2
has only one digit, return it.
Follow up:
Could you do it without any loop/recursion in O(1) runtime?
var addDigits = function(num) {
var res = num;
while(res >= 10){
num = res;
res = 0;
while(num>0){
res = res + num % 10;
num = parseInt(num / 10);
}
}
return res;
};
题目后续:写成不用循环的方法,查了一下百度发现还有数学公式来着,就可以不用循环了0_0。
公式是(num-1)%9+1
Given two non-negative integers num1
and num2
represented as string, return the sum of num1
and num2
.
Note:
- The length of both
num1
andnum2
is < 5100. - Both
num1
andnum2
contains only digits0-9
. - Both
num1
andnum2
does not contain any leading zero. - You must not use any built-in BigInteger library or convert the inputs to integer directly.
var addStrings = function(num1, num2) {
if(num1.length < num2.length) {
var _swap = num1;
num1 = num2;
num2 = _swap;
}
var i = num1.length -1;
var j = num2.length -1;
var res = [];
var cur=0,cin=0;
while(j>=0){
cur = (cin + parseInt(num1[i]) + parseInt(num2[j])) % 10;
cin = parseInt((cin + parseInt(num1[i]) + parseInt(num2[j])) / 10);
res.unshift(cur);
j--;
i--;
}
while(i>=0){
if(cin>0){
cur = (cin + parseInt(num1[i])) % 10;
cin = parseInt( (cin + parseInt(num1[i]) ) / 10);
res.unshift(cur);
} else {
res.unshift(parseInt(num1[i]));
}
i--;
}
if(cin>=1){
res.unshift("1");
}
return res.join('');
};