c++下将人民币大写输出部分数据会出错且返回值不为0,如何修改

#include<iostream>
#include<string>
#include<cmath>
using namespace std;

int main()
{
    cout << "请输入[0..100 亿)之间的数字:" << endl;
    double a, b, c;
    int  d, e, f, g, h, i, j, k, l, m, n, o;
    string s1[10] = { "","壹","贰","叁","肆","伍","陆","柒","捌","玖" };
    string s2[7] = { "拾","亿","仟","佰","万","圆","整" };
    string s3[3] = { "零","角","分" };
    cin >> a;
    a = a / 10;
    b = modf(a, &c) + 0.0005;
    cout << "大写结果是:" << endl;
    d = int(c / 1e8);
    e = int(c / 1e7) - int(c / 1e8) * 10;
    if (d != 0)
    {
        cout << s1[d] << s2[0];
        if (e != 0)
        {
            cout << s1[e] << s2[1];
        }
        else
        {
            cout << s2[1];
        }
    }
    else
    {
        if (e != 0)
        {
            cout << s1[e] << s2[1];
        }
    }
    f = int(c / 1e6) - int(c / 1e7) * 10;
    g = int(c / 1e5) - int(c / 1e6) * 10;
    h = int(c / 1e4) - int(c / 1e5) * 10;
    i = int(c / 1e3) - int(c / 1e4) * 10;
    if (f != 0)
    {
        cout << s1[f] << s2[2];
        if (g != 0)
        {
            cout << s1[g] << s2[3];
            if (h != 0)
            {
                cout << s1[h] << s2[0];
                if (i != 0)
                {
                    cout << s1[i] << s2[4];
                }
            }
            else
            {
                if (i != 0)
                {
                    cout << s3[0] << s1[i] << s2[4];
                }
            }
            
        }
        else
        {
            if (h != 0)
            {
                cout << s3[0] << s1[h] << s2[0];
                if (i != 0)
                {
                    cout << s1[i] << s2[4];
                }
            }
            else
            {
                if (i != 0)
                {
                    cout << s3[0] << s1[i] << s2[4];
                }
            }
        }
    }
    else
    {
        if (g == 0)
        {
            if (h == 0)
            {
                if (i == 0)
                {
                    cout << "";
                }
                else
                {
                    cout << s3[0] << s1[i] << s2[4];
                }
            }
            else
            {
                cout << s3[0] << s1[h] << s2[0];
                if (i == 0)
                {
                    cout << s2[4];
                }
                else
                {
                    cout << s1[i] << s2[4];
                }
            }
        }
        else
        {
            cout << s3[0] << s1[g] << s2[3];
            if (h != 0)
            {
                cout << s1[h] << s2[0];
                if (i != 0)
                {
                    cout << s1[i] << s2[4];
                }
                else
                {
                    cout << s2[4];
                }
            }
            else
            {
                if (i == 0)
                {
                    cout << s2[4];
                }
                else
                {
                    cout << s3[0] << s1[i] << s2[4];
                }
            }
        }
    }
    j = int(c / 1e2) - int(c / 1e3) * 10;
    k = int(c / 10) - int(c / 1e2) * 10;
    l = int(c) - int(c / 10) * 10;
    m = int(b * 10);
    if (j != 0)
    {
        cout << s1[j] << s2[2];
        if (k != 0)
        {
            cout << s1[k] << s2[3];
            if (l != 0)
            {
                cout << s1[l] << s2[0];
                if (m != 0)
                {
                    cout << s1[m];
                }
            }
            else
            {
                if (m != 0)
                {
                    cout << s3[0] << s1[m];
                }
            }

        }
        else
        {
            if (l != 0)
            {
                cout << s3[0] << s1[l] << s2[0];
                if (m != 0)
                {
                    cout << s1[m];
                }
            }
            else
            {
                if (m != 0)
                {
                    cout << s3[0] << s1[m];
                }
            }
        }
    }
    else
    {
        if (k == 0)
        {
            if (l == 0)
            {
                if (m == 0)
                {
                    cout << "";
                }
                else
                {
                    cout << s3[0] << s1[m];
                }
            }
            else
            {
                cout << s3[0] << s1[l] << s2[0];
                if (m == 0)
                {
                    cout <<"";
                }
                else
                {
                    cout << s1[m];
                }
            }
        }
        else
        {
            cout << s3[0] << s1[k] << s2[3];
            if (l != 0)
            {
                cout << s1[l] << s2[0];
                if (m != 0)
                {
                    cout << s1[m];
                }
                else
                {
                    cout << "";
                }
            }
            else
            {
                if (m == 0)
                {
                    cout << "";
                }
                else
                {
                    cout << s3[0] << s1[m];
                }
            }
        }
    }
    cout << s2[5];
    n = int(b * 100) - d * 10;
    o = int(b * 1000) - int(b * 10) * 100 - int(d * 10);
    if (n == 0)
    {
        if (o == 0)
        {
            cout << s2[6];
        }
        else
        {
            cout << s3[0] << s1[o] << s3[2];
        }
    }
    else
    {
        if (o == 0)
        {
            cout << s1[n] << s3[1] << s2[6];
        }
        else
        {
            cout << s1[n] << s3[1] << s1[o] << s3[2];
        }
    }

    return 0;
}

第17行modf是干嘛的函数,哪来的