• 进制转换


    进制转换

    #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;
    }
    
  • 相关阅读:
    [POI2014]KUR-Couriers
    MySQL有哪些索引
    索引的设计原则
    explain参数之extra
    explain参数之type
    explain参数之select_type
    如何查询最后一行的记录
    为什么MySQL自增id不连续?
    MySQL字符集
    MySQL有哪些优化策略?
  • 原文地址:https://www.cnblogs.com/w-w-t/p/13159068.html
Copyright © 2020-2023  润新知