【解题报告】洛谷P1017 进制转换
【解题报告】洛谷P1017 进制转换
题目链接
https://www.luogu.com.cn/problem/solution/P1017
思路
我们知道进制的转换是可以从十进制转换到其他进制的
所以我们考虑是怎么转换的
假设数字为 \(n\) ,我们要把它转化成 \(k\) 进制的话,我们就要对其进行一波操作,每次对它进行魔(模)法,剩下来的数字就是他的对应的进制位置上的数字,举个例子,比如192转化为八进制
\[192 \space mod \space 8=0
\\
192 /8=24
\\
24 \space mod \space 8 =0
\\
24/8=3
\\
3 \space mod \space 8=3
\]
然后从下往上倒序输出就是 \(300_{(8)}\)
还原回去
\[3 \times 8^2=192
\]
成立,所以说明我们的方法是对的
然后我们考虑负数,负数魔法有余数小于零怎么办啊
那我们就类似于借位,把余数借成正数再输出
#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;
}
本博文为wweiyi原创,若想转载请联系作者,qq:2844938982