Ну, по ссылке вообще кромешный ужас...
У вас чуть меньший, но... Вы считаете по формуле

(которая сходится для x из (-1,1], но для x == 1
делает это очень медленно, для точности n знаков надо 10n слагаемых...)
Даже так вид формулы наводит на совершенно иной код (ладно, пусть, как у вас, для количества членов...):
for (int i = 1; i <= n; i++) res += ((i%2)? +1.0 : -1.0)/i;
или
for(int i = 1; i <= n; i++) res += ((i%2)*2 - 1.0)/i;
или, если все это кажется высшей математикой :) хотя бы
for(int i = 1, sign = -1; i <= n; i++) res += double(sign = -sign)/i;
Но стоит дописать рядом

и вычислить разность, как получается ряд, сходящийся для x из (-1,1), т.е. для любого аргумента под знаком логарифма:

Чтобы получить логарифм двойки, надо подставить x = 1/3...
Получаем код типа
int n;
double res = 0;
cin >> n;
double x = 1./3, term = x;
for(int i = 1; i <= 2*n; i+=2)
{
res += term/i;
term *= x*x;
}
cout << 2*res;
Но лучше задавать не количество членов, а точность (последний член ряда должен быть меньше этого значения):
double eps = 1e-6, x = 1./3, term = x, res = term;
x*=x;
for(int i = 3; abs(term) > eps; i+=2) res += (term *=x) /i;
res *= 2;
cout << res;