【解题报告】洛谷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;
}
posted @ 2021-10-14 13:21  wweiyi  阅读(64)  评论(0编辑  收藏  举报
js脚本