数位拆分

发布时间 2023-04-25 16:31:30作者: 重生之我是菜鸟

https://ac.nowcoder.com/acm/contest/11228/D

  • 观察这四种操作,a = 0,b = 1,b可以乘上x,且a可以加上b
  • 观(1234)x ,x表示为x进制,则(1234)x = 1* pow(x,3) + 2* pow(x,2)+3* pow(x,1)+4 * pow(x,0)
  • 此时已经发现了构造方法,即将n这个十进制的数转换为x进制,再根据上面列的进制拆分来还原操作,最后把a变为x
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int t;
int n,x;
int a,b;
int ans[500];
struct node{
    int aa;
    char bb;
}arr[1000];
int main(){
    cin>>t;
    while(t--){
        cin>>n>>x;
        int num = n;
        int cnt = 0;
        while(num!=0){
           ans[++cnt] = num%x;
           num /= x;
        }
        int ansl = 0;
         for(int i =cnt;i>=1;i--){
             ansl += (ans[i]+1);
        }
        cout<<ansl<<endl;
        for(int i = 1;i<=cnt;i++){
            for(int j = 1;j<=ans[i];j++){
                cout<<1<<" "<<"a"<<endl;
            }
            cout<<2<<" "<<'b'<<endl;
        }
    }
}