Перепишите этот цикл
while( i > 0){
if ( n % i == 0){
largest = i;
}
i --;
}
, например, как
while( i > 0 && n % i != 0 ) i--;
if ( i ) largest = i;
Также вместо типа int следует использовать тип unsigned int.В противном случае пользователь может ввести отрицательное число.В этом случае цикл не имеет смысла.
Используя ваш подход, программа может выглядеть, например, следующим образом
#include <iostream>
int main()
{
unsigned int n = 0, largest = 1;
std::cout << "enter a non-negative number: ";
std::cin >> n;
if ( n != 0 )
{
unsigned int i = n - 1;
while ( i > 0 && n % i != 0 ) i--;
if ( i ) largest = i;
}
std::cout << "The largest own divisor is " << largest << std::endl;
return 0;
}