【解题报告】洛谷P1017 进制转换
题目链接
https://www.luogu.com.cn/problem/solution/P1017
思路
我们知道进制的转换是可以从十进制转换到其他进制的
所以我们考虑是怎么转换的
假设数字为 n ,我们要把它转化成 k 进制的话,我们就要对其进行一波操作,每次对它进行魔(模)法,剩下来的数字就是他的对应的进制位置上的数字,举个例子,比如192转化为八进制
192 mod 8=0192/8=2424 mod 8=024/8=33 mod 8=3
然后从下往上倒序输出就是 300(8)
还原回去
3×82=192
成立,所以说明我们的方法是对的
然后我们考虑负数,负数魔法有余数小于零怎么办啊
那我们就类似于借位,把余数借成正数再输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <string> using namespace std; int n,r; char s[100005]; int len; int main() { cin>>n>>r; cout<<n<<"="; while(n!=0) { int divi=n%r; n/=r; if(divi<0) divi-=r,n++; if(divi<10) s[++len]=(char)(divi+48); else s[++len]=(char)((divi-10)+'A'); } for(int i=len;i>=1;i--) putchar(s[i]); cout<<"(base"<<r<<")"<<'\n'; return 0; }
|