#这内容数学知识吧,如果不懂还真的做不出来,技巧性不强,就当多学了一个数学知识了~
百度一波负进制数:和正进制一样,每次取的余数保证在0~m-1之间。(例如m=-16,则余数应该在0~15)就可以直接输出。所以用系统的“%”运算符的时候必须注意检查是不是在该范围(可能在m+1~0),否则就调整。调整的方法是:如果余数<0,那么:余数-=m;商++,让起变成0-m-1之间;
其他方面
:用字符串,用起下标对应起数值大小
string s="0123456789ABCDEFGHIJ";
用栈存储就可以起到倒序啦
while(!st.empty()){cout<<s[st.top()];st.pop();}
ACode:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
string s="0123456789ABCDEFGHIJ";
int n,m,x;
void solve() {cin>>n>>m;stack<int>st;cout<<n<<"=";//规则 //百度一波负进制数:和正进制一样,每次取的余数保证在0~m-1之间。/// 例如m=-16,则余数应该在(0~15)就可以直接输出。所以用系统的“%”// 运算符的时候必须注意检查是不是在该范围(可能在m+1~0),// 否则就调整。调整的方法是:如果余数<0,那么:余数-=m;商++;while(n){x=n%m;n/=m;if(x<0){x-=m;n++;}st.push(x);}//输出 while(!st.empty()){cout<<s[st.top()];st.pop();}cout<<"(base"<<m<<")";
}
int main() {ios::sync_with_stdio(false);int tt=1;//cin>>tt;while(tt--)solve();return 0;
}
ok!~