Я отправляю этот второй ответ, потому что думаю, что у меня самый эффективный алгоритм для всех (спасибо за помощь Atul):)
void Main()
{
Console.WriteLine (ReorderInt32Digits2(2927466));
Console.WriteLine (ReorderInt32Digits2(12492771));
Console.WriteLine (ReorderInt32Digits2(-1024));
}
public static int ReorderInt32Digits2(int v)
{
bool neg = (v < 0);
int mult = neg ? -1 : 1;
int result = 0;
var counts = GetDigitCounts(v);
for (int i = 0; i < 10; i++)
{
int idx = neg ? 9 - i : i;
for (int j = 0; j < counts[idx]; j++)
{
result += idx * mult;
mult *= 10;
}
}
return result;
}
// From Atul Sikaria's answer
public static int[] GetDigitCounts(int n)
{
int v = Math.Abs(n);
var result = new int[10];
while (v > 0) {
int digit = v % 10;
v = v / 10;
result[digit]++;
}
return result;
}
В вашем случае тип возвращаемого значения - это строка.
Как насчет этого ответа? Он предполагает, что «привет» вводится в текстовое поле. В этом случае, когда длина form.text
of receiveText(form)
будет восстановлена, длина равна 6. Длина «привет» равна 5. Каждый код символа равен [32,104,101,108,108,111]
. А именно, верхняя буква - это пространство. Таким образом, if(x=="hello")
всегда ложно. Чтобы удалить эту проблему с помощью вашего скрипта, пожалуйста, измените для receiveText(form)
следующим образом.
var nameBox = form.text;
var nameBox = form.text.trim();
google.script.run.withSuccessHandler(function() {
google.script.run.withSuccessHandler(onSuccessed).items();
}).receiveText(document.forms[0]);