我已经实现了一个简单的函数,当除数是1) systemutil.Run "websta.me/tag/graffiti";
2) Browser("#graffiti Instagram photos").Page("#graffiti Instagram photos").WebButton("<BUTTON class="btn btn-default btn-xs likeButton" type=button data-target=".*.*"><I class="fa fa-heart"></I>Like</BUTTON> ").Click
3)wait(1)
4) Browser("#graffiti Instagram photos").Page("#graffiti Instagram photos").WebButton("<BUTTON class="btn btn-default btn-xs likeButton" type=button data-target=".*.*"><I class="fa fa-heart"></I>Like</BUTTON> ").Click
5) wait(1)
的幂时,它返回商和余数:
10
只是好奇,除了直接使用func getQuotientAndRemainder(num int64, digits uint) (int64, int64) {
divisor := int64(math.Pow(10, float64(digits)))
if num >= divisor {
return num / divisor, num % divisor
} else {
return 0, num
}
}
和/
运算符之外,是否有更好的算法来获取商和余数?或者仅在除数是%
的力量的情况下?
答案 0 :(得分:1)
return num / divisor, num % divisor
&#34;算法&#34;是有声的,可以说是最好的方式:有表现力。如果有的话,这部分代码可能过于复杂:
int64(math.Pow(10, float64(digits)))
转换为float64
和从int64
转换可能是次优的。此外,任何大于18的幂的10将溢出var tableArr = new Array();
var flag = 0;
var speed = new Array();
var speed_index = new Array();
var cons = new Array();
var cons_index = new Array();
var dest = new Array();
var dest_index = new Array();
// Gets the values from the table cell and creates the checkboxes
function get_values() {
if (flag == 0) {
flag = 1;
$.each(speed, function(i) {
$(".top-filter .speed").append('<input type=\'checkbox\' index=' + speed_index[i] + '> ' + speed[i] + '<br/>');
});
$.each(cons, function(i, val) {
$(".top-filter .cons").append('<input type=\'checkbox\' index=' + cons_index[i] + '> ' + cons[i] + '<br/>');
});
$.each(dest, function(i, val) {
$(".top-filter .dest").append('<input type=\'checkbox\' index=' + dest_index[i] + '> ' + dest[i] + '<br/>');
});
}
};
$(document).ready(function() {
// to push the values from cell to array
$('.table thead tr:nth-child(2) th').each(function(e, a) {
if ($(a).attr('name') == 'speed') {
speed.push($(this).text());
speed_index.push($(this).index());
} else if ($(a).attr('name') == 'cons') {
cons.push($(this).text());
cons_index.push($(this).index());
} else {
dest.push($(this).text());
dest_index.push($(this).index());
}
});
get_values();
$('input[type=checkbox]').click(function() {
var index = $(this).attr('index');
var name = $(this).parent().attr("class");
$('.table thead .this_h th').eq(index).toggleClass('hidden');
var hidden = $('.table thead th.hidden')
$.each(hidden, function() {
var idx = $(this).index() + 1;
$.each($('.table tbody tr'), function() {
$(this).find('td').eq(idx).hide();
});
});
var visible = $('.table thead .this_h th:not(.hidden)');
$.each(visible, function() {
var idx = $(this).index() + 1;
$.each($('.table tbody tr'), function() {
$(this).find('td').eq(idx).show();
});
});
var length = $(".table thead tr:nth-child(2)").find("th[name=" + name + "]").filter(':visible').length;
if (length === 0) {
$(".table thead tr:nth-child(1)").find("th[name=" + name + "]").addClass("hidden");
} else {
$(".table thead tr:nth-child(1)").find("th[name=" + name + "]").removeClass("hidden").attr('colspan', length);
}
});
});
。我建议你添加一个健全性检查并用乘法循环替换代码并测量其性能。
但是接下来:如果您关心性能,只需在汇编中实现它。
答案 1 :(得分:1)
显然,你应该运行一些Go基准:Benchmarks, Package testing。
您的解决方案看起来效率不高。试试这个:
package main
import "fmt"
func pow(base, exp int64) int64 {
p := int64(1)
for exp > 0 {
if exp&1 != 0 {
p *= base
}
exp >>= 1
base *= base
}
return p
}
func divPow(n, base, exp int64) (q int64, r int64) {
p := pow(base, exp)
q = n / p
r = n - q*p
return q, r
}
func main() {
fmt.Println(divPow(42, 10, 1))
fmt.Println(divPow(-42, 10, 1))
}
输出:
4 2
-4 -2
基准:
BenchmarkDivPow 20000000 77.4 ns/op
BenchmarkGetQuotientAndRemainder 5000000 296 ns/op