E-简单数论
先用循环(数据范围小)求非零元素个数ans,对于从大到小排序,第p个元素如何表示,如果p<ans,就用ans减去p,在对求到的这个数进行k进制转换,总共要输出m位数,就要求输出前导零。
#include <cstdio>
using namespace std;
typedef long long ll;
ll a[15];
int main() {
ll num, t, i;
ll k, m, p;
ll ans;
scanf("%lld", &t);
while (t--) {
scanf("%lld%lld%lld", &k, &m, &p);
for (i = 0, ans = 1; i < m; i++, ans *= k);
printf("%lld\n", ans - 1);
if (ans <= p) {
printf("overflow\n");
} else {
p = ans - p;
for (i = m - 1; i >= 0; i--) {
a[i] = p % k;
p /= k;
}
for (i = 0; i < m; i++) {
printf("%lld ", a[i]);
}
printf("\n");
}
}
return 0;
}