c语音c26451算术溢出问题

#include
void main()
{
    int v,n;//m化升,n是桶数
    int h, r; {};
    scanf_s("%d %d", &h,&r);
    v = h * r*r*3.14 / 1000;
    n = 20 / v;
    printf("%d", n+1);
}

v= 那一行显示算术溢出,请问怎么解决

参考如下:

#include<stdio.h>
#include<math.h>
int main()
{
    double v;
    int n;  // n是桶数
    int h, r; {};
    scanf_s("%d %d", &h,&r);
    v = h * r*r*3.14 / 1000;
    n = (int)ceil(20 / v);  // ceil(x)返回不小于x的最小整数值(然后转换为double型)。
    printf("%d", n);
    return 0;
}

v是整型,后面3.14是浮点数,自然有溢出了啊,小数部分丢失了啊
v还是定义为浮点型吧