n = 12
должно вывести 1+2+3+4+5+6+7+8+9+(1+0)+(1+1)+(1+2)
Написал 2 программы, но пишет, из-за того что долго выполняются - процесс отменяется. То есть, их нужно оптимизировать, только вот КАК
Код двух программ:
using System;
public class TwistedSum
{
public static long Solution(long n)
{
int res = 0;
int ostatok = 0;
int Part = 0;
for (int i = 1; i <= n; i++)
{
if (i >=10)
{
Part = i;
while (Part >= 0)
{
ostatok = Part % 10;
Part = Part / 10;
res = res + ostatok;
}
}
else { res = res + i}
}
return res;
}
}
(тут передается в n число, все нормально, просто только функция написана)
2ой код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace codewarsSumaCifr
{
class Program
{
static void Main(string[] args)
{
long n = 10;
Console.Write(Solution(n));
Console.ReadKey();
}
public static long Solution(long n)
{
int res = 0;
string str2 = "";
for (int i = 1; i <= n; i++)
{
str2 = str2 + i.ToString();
}
for (int j = 0; j < str2.Length; j++)
{
res = res + (int)Char.GetNumericValue(str2[j]);
}
return res;
}
}
}
Ответ
Цикл, вообще не правильное решение, его надо свернуть, и решить задачу аналитически. Решать задачу целиком скучно, но идею, как она решается, подкину:
9: (0+0)+(0+1)+(0+2)+(0+3)+(0+4)+(0+5)+(0+6)+(0+7)+(0+8)+(0+9) = 45
19: (1+0)+(1+1) ... +(1+8)+(1+9) + 45 = 1*10 + 1*45 + 45
29: (2+0)+(2+1) ... +(2+8)+(2+9) + 2*45 + 1*10 = 2*10 + 1*10 + 2*45 + 45
...
99: (9+0)+(9+1) ...+(9+9) + 9*45 + 8*10 ... + 1*10 = 9*10 + 8*10 ... + 1*10 + 9*45 + 45
Комментариев нет:
Отправить комментарий