P1017 进制转换(负进制&数论)
题意:给一个整数和基数,要求转化以该基数的该进制。
思路:题目主要难度为:余数可能是负数,因为转化为该进制表示时是用余数的倒序,由于除数(为负数)的绝对值比余数的绝对值大,所以用余数减去一个除数,商再加上一个除数即可以保证余数为正,且结果不变。
#include<bits/stdc++.h>
using namespace std;
void fun(int n,int r){
if(n==0) return;
int m=n%r;
if(m<0) m-=r,n+=r;
if(m>=10) m='A'+m-10;//这里m是ASCII码
else m=m+'0';
fun(n/r,r);
printf("%c",m);
}
int main(){
int n,r;
cin>>n>>r;
printf("%d=",n);
fun(n,r);
printf("(base%d)\n",r);
return 0;
}