进制转换

进制转换

进制转换

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

int Atoi( string str , int N ){      //N进制转10进制,输入string 输出int
    int ans = 0;
    for( int i = 0 ; i < str.size() ; i++){
        if(str[i] >= '0' && str[i] <= '9')
            ans = ans * N + str[i] - '0';
        else
            ans = ans * N + str[i] - 'A' + 10;
    }
    return ans;
}

string Itoa( int num , int M ){   //10进制转M进制, 输入int ,输出string
    string ans = "";
    do{
        int t = num % M;
        if( t >= 0 && t <= 9 )
            ans += t + '0';
        else
            ans += t - 10 + 'A';
        num /= M;   
    }while( num != 0 );
    reverse( ans.begin() , ans.end() );
    return ans;
}

int main(){
    int n , m;
    string s1;
    cin >> n >> s1 >> m;
    int num1;
    num1 = Atoi( s1 , n );   // 先把n进制转10进制
    string s2;
    s2 = Itoa( num1 , m );  //再将10进制转m进制 
    cout << s2 << endl; 
    return 0;
}

负数进制的进制转换

进制转换

解题思路:

和正数差不多,但要注意将余数为负数的转化为正数,做法就是给商+1,余数-m (m为进制数,也就是除数),就是将原本的余数再拿出一部分

AC代码:

#include<bits/stdc++.h>
using namespace std;
string Itoa( int num , int m ){
    string str = "";
    do{
        int t = num % m;
        num /= m;
        if( t < 0 ){
            t -= m;      
            num += 1;     //除数+1,余数-m 
        }
        if( t >= 0 && t <= 9 )
            str += t + '0';
        else
            str += t - 10 + 'A'; 
    }while(num != 0);
    reverse( str.begin() , str.end() );
    return str;
}
int main(){
    int n,m;
    cin >> n >> m;
    string s1;
    s1 = Itoa( n , m );
    cout << n << "=" << s1 << "(base" << m << ")" << endl;
    return 0;
}

原文链接: https://www.cnblogs.com/w-w-t/p/13159068.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    进制转换

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/356705

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午11:21
下一篇 2023年3月2日 上午11:21

相关推荐