Codeforces Round #462 (Div. 2)
观察样例之后我们发现他其实很像一个k进制数,每一次我们都需要将当前位凑出一个小于k的非负整数,模拟就可以了。感觉应该会有一些细节。
1 #include<bits/stdc++.h> 2 #define LL long long 3 using namespace std; 4 LL p; 5 int k; 6 int cnt; 7 LL now; 8 vector<int>S; 9 int main() 10 { 11 scanf("%lld%d",&p,&k); 12 now=p; 13 while(now<0 || now>=k){ 14 LL u=-now/k; 15 if(now<0&&(u*k+now!=0))u++; 16 S.push_back((int)(now+u*k)); 17 now=u; 18 cnt++; 19 } 20 S.push_back((int)now); 21 cout<<cnt+1<<endl; 22 int siz=S.size(); 23 for(int i=0;i<siz;i++)cout<<S[i]<<" "; 24 return 0; 25 }