为什么代码这样写会出现“Float Point Exception”的错误

题目:
100 可以表示为带分数的形式:100=3+69258/714
还可以表示为:100=82+3546/197
注意特征:带分数中,数字 1∼9 分别出现且只出现一次(不包含 0)。
类似这样的带分数,100 有 11 种表示法。
输入格式
一个正整数。
输出格式
输出输入数字用数码 1∼9 不重复不遗漏地组成带分数表示的全部种数。
数据范围
1≤N<1000000
输入样例1:
100
输出样例1:
11
输入样例2:
105
输出样例2:
6

代码:

#include<iostream>

using namespace std;
const int N=9;
bool st[N];
int n;
int res;
int fz[4];
int fm[10];

void fenmu(int u,int t,int a)
{
    for(int i=1;i<=10;i++)
    {
        int b=0;
        b=b*10+fm[i];
        
        if(t+a/b==n) res++;
        
        return;
    }
    
    for(int i=1;i<=9;i++)
    {
        if(!st[i])
        {
            fm[u]=i;
            st[i]=true;
            fenmu(u+1,t,a);
            
            fm[u]=0;
            st[i]=false;
        }
    }
}

void fenzi(int u,int t)
{
    if(u>3)
    {
        int a=0;
        
        for(int i=1;i<=3;i++)
        {
            a=a*10+fz[i];
        }
        
        fenmu(1,t,a);
        
        return;
    }
    
    for(int i=1;i<=9;i++)
    {
        if(!st[i])
        {
            fz[u]=i;
            st[i]=true;
            fenzi(u+1,t);
            
            fz[u]=0;
            st[i]=false;
        }
    }
}

int main()
{
    cin>>n;
    
    for(int i=1;i<n;i++)
    {
        int t=i;
        
        while(t)
        {
            if(t%10)
              st[t%10]=true;
              
            t=t/10;
        }
        
        fenzi(1,t);
    }
    
    cout<<res<<endl;
    
    return 0;
}