C++堆栈溢出或者其他问题,洛谷。

给出一个数n,你需要将n写成若干个数的和,其中每个数的十进制表示中仅包含0和1。
问最少需要多少个数
输入输出格式
输入格式:一行 一个数 n(1≤n≤10^6)
输出格式:最少的数的个数,并给出一种方案。

#include
#include
#include
using namespace std;
int a[1000000];
int main()
{
    int m,n,b[10],t=0,s=0,i;
    scanf("%d",&n);
    m=n;
    while(n!=0)
    {
        a[i]=n%10;
        n=n/10;
        t++;
    }
    //t=t-1;
    for(i=0;i<10;i++)
    {
        for(int j=0;jif(a[j]>0)
            {
                b[i]=b[i]+pow(10,j);
                a[j]--;
            }
        }
        s=s+b[i];
        if(s==m)
        {
            i++;
            break;
        }
    }
    printf("%d\n",i);
    for(int j=0;jprintf("%d ",a[j]);
    }
}

运行结果及详细报错内容

输入一个数后,不会输出任何结果,最后在下方显示Process exited with return value 3221225477

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

之前无法输入数据的情况,把int数组设为了全局变量。
现在好像是堆栈溢出的原因,但还是找不到问题。

你输入的n是多少?
i没有初始化,将i=0,再进入while,你while中i始终没变。
b数组没初始化,用0初始化。
最后一次打印printf,应该是打印b[i]