C (Not golfed neither tested yet), 83 bytes
int cake(int perc_taken, int given_back)
{
int startcake = floor(100.f/perc_taken*given_back+1);
for(int i = 0; i < 6; i++)
{
startcake = ceil((startcake-given_back) * 100.f/(100 - perc_taken));
}
return startcake;
}
If it works, it works for all possible startcakes, not just from 1 to 100.
EDIT: It works. Golfed:
n(int p,int g) {int s=100./p*g+1,i=0;for(;i++<6;){s=ceil((s-g)*100./(100-p));}return s;}
With the 'maximum 100 cakes' limit:
n(int p,int g) {int s=100./p*g+1,i=0;for(;i++<6;){s=ceil((s-g)*100./(100-p));}return s>100?0:s;}
91 bytes.