这个代码错哪了,为啥open judge报错?

#include <iostream>
using namespace std;
int main()
{
  int h,b,m=1;
  double s=0,pi=3.14159;
  cin>>h>>b;
  s =pi*h*b*b;
  while(s<20000) {
    ++m;
  s=s*m;
  }
   cout<<m<<endl;
  return 0;
}

描述

一只大象口渴了,要喝20升水才能解渴,但现在只有一个深h厘米,底面半径为r厘米的小圆桶(h和r都是整数)。问大象至少要喝多少桶水才会解渴。

输入有一行:两个整数分别表示小圆桶的深h和底面半径r,单位都是厘米。

输出一行,包含一个整数,表示大象至少要喝水的桶数。

11行错了s=s*m让s依次此*1,*2,*3知道s>=20000,可以新开一个变量来记录m桶水的总体积每次加一个s,或是直接用s*m与20000作比较

//用sum记录m桶水的体积
double sum=s;
while(sum<20000){
    m++;
    sum+=s;
}
//用s*m与20000作比较,s为一桶水体积,m为当前桶数
while(s*m<20000)
    m++;

可以用以上两段代码替换9-11行