洛谷P1017 进制转换【NOIP2000提高组T1】

版权声明:转载无所谓的。。。 https://blog.csdn.net/xuxiayang/article/details/82817310

链接

https://www.luogu.org/problemnew/show/P1017


大意

将十进制数 n n 转换为 m m 进制数
m m 为负数!)


思路

转换进制是一样的,都是除以 m m 倒取余数,可是在计算机中的取模结果却是个相反数,所以我们可以让它“少减点”,这样就可以把模数变回正数,记得这个时候还要加上少减的次数


代码

#include<cstdio>
using namespace std;int n,m,j,a[1001],k,t;
signed main()
{
	scanf("%d%d",&n,&m);//输入
	printf("%d=",n);
	while(n)
	{
		k=n%m;
		t=n/m;
		while(k<0) k-=m,t++;//代码核心
		n=t;
		a[++j]=k;
	}
	for(register int i=j;i>0;i--) 
	{
		if(a[i]>9) putchar(a[i]+55);else//处理-10以下进制的情况
		putchar(a[i]+48);//输出
	}
	printf("(base%d)",m);//输出
}

猜你喜欢

转载自blog.csdn.net/xuxiayang/article/details/82817310
今日推荐