zoukankan      html  css  js  c++  java
  • 大数运算之进制转换

    大数的之间的进制转换不能简单的用取余法来做,这样会导致溢出。以牛客网的这道题10进制 vs 2进制 为例,题目给的数字已经达到了1000位,即使用long long类型也没办法存储,所以要用字符数组来存储。然后用模拟手算除法的方式来进行进制转换。

    代码如下:

    #include<bits/stdc++.h>
    using namespace  std;
    string conversion(int oldbase,string str,int newbase)
    {
    	int len = str.size();
    	string s;
    	for(int i = 0;i < len;)
    	{
    		int k = 0;
    		for(int j = i;j < len;j++)
    		{
    			int temp = (k*oldbase + str[j] - '0')%newbase;//手算除法得到的余数 
    			str[j] = (k*oldbase + str[j] - '0')/newbase +'0';//手算除法得到的商 
    			k = temp;	
    		}
    		s += char(k + '0');
    		while(str[i]=='0') i++; 
    	}
        reverse(s.begin(),s.end());
    	return s;
    	
    }
    int main()
    {	
    	string num;
    	while(cin >> num)
    	{
    		string a = conversion(10,num,2);
    		reverse(a.begin(),a.end());
    		num = conversion(2,a,10);
    		cout << num << endl;
    	}
    	return 0;
    } 
    
  • 相关阅读:
    uva 10129
    年化利率
    house买房原理,2019,第一版
    car二手车购买原理
    car购车翻译篇
    car配置篇
    健身原理
    语法学习,从句
    语法学习,简单语句
    名词解释
  • 原文地址:https://www.cnblogs.com/multhree/p/10779549.html
Copyright © 2011-2022 走看看