跟上一题一样,我觉得都是差不多的啊

问题遇到的现象和发生背景

【题目描述】
幂ab的末3位数是多少?

【输入】
两个正整数a,b。1≤a≤100,1≤b≤10000。

【输出】
从高位到低位输出幂的末三位数字,中间无分隔符。若幂本身不足三位,在前面补零。

【输入样例】
7 2011
【输出样例】
743

测试用例都能通过,但是就是提交不过去

问题相关代码,请勿粘贴截图
#include<iostream>
#include<iomanip>
using namespace std;
int main() {
    int a,b,s=1;
    cin>>a>>b;
    for(int i=1;i<=b;i++){
        s=s*a;
    }
    cout<<setw(3)<<s%1000;    
    return 0;
}
运行结果及报错内容

可能是那里补0那里出了问题,不知道该怎么实现

我的解答思路和尝试过的方法
我想要达到的结果

for(int i=1;i<=b;i++){
s=s*a;
s=s%1000;
}
printf("%03d",s);