P1017进制转换

    技术2024-11-08  10

    思路:对于这种进制转换问题,基本都是采取辗转相除法进行转换,对于该题不同的是该题的除数是为负数,故每次的余数可能为负,当这种情况,我们只需要讲余数减去除数,再讲商+1即可。 (商+1)除数+(余数-除数)=商除数+除数+余数-除数=商*除数+余数=被除数

    #include<bits/stdc++.h> using namespace std; char c[21]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','G','K'}; void solve(int now,int p) { if(now==0) return; int cnt=now%p; if(cnt<0) solve(now/p+1,p); else solve(now/p,p); if(cnt<0) cnt-=p; cout<<c[cnt]; } int main() { int n,R; while(cin>>n>>R) { cout<<n<<"="; solve(n,R); printf("(base%d)\n",R); cout<<endl; } }
    Processed: 0.021, SQL: 9