请问代码哪里错误了?可以编译但得不出正确答案

对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
样例输出
00000
00001
00010
00011
<以下部分省略>
#include
using namespace std;
int main()
{
int a[5] = { 0,0,0,0,0 };
int s = 4;
int temp;
for (int i = 0; i < 32; i++)
{
temp = i;
while (temp != 0)
{
a[s] = temp % 2;
temp = temp / 2;
s--;
}
for (int j = 0; j < 5; j++)
{
cout << a[j];
}
cout << endl;
}
return 0;
}

问题解决的话,请点采纳

#include <iostream>
using namespace std;
int main()
{
int a[5] = { 0,0,0,0,0 };
int s = 4;
int temp;
for (int i = 0; i < 32; i++)
{
temp = i;
s = 4; //加上
while (temp != 0)
{
a[s] = temp % 2;
temp = temp / 2;
s--;
}
for (int j = 0; j < 5; j++)
{
cout << a[j];
}
cout << endl;
}
return 0;
}

我们知道这其实是要输出0-31的2进制

#include <iostream>
#include <bitset>
using namespace std;
int main()
{
    for (int nn = 0; nn < 32; nn++)
        cout << bitset<5>(nn)<<endl;
    return 0;
}