大数10进制转16进制

进制转换是非常重要的内容,考察基本功,4月底在字节跳动的春招笔试中做到了进制转换的题,不过是大整数的进制转换。

题目大意:
十进制数转16进制,会出现超大数字的情况,大小超过64位正整数的表示范围,不能使用系统库进行进制转换。

输入:
一个十进制数字

输出:
输出该十进制数对应的16进制数。

大概有以下几种解法:
(1)当场手写大整数包(C++);
(2)模拟大整数的笔算(模拟小学学的除法)
(3)用java中的BigInteger类进行运算;

显然,第一种方法不太明智,杀鸡焉用宰牛刀,后两者可以尝试:

解题1:模拟笔算
个人认为这个是轻巧的方法,里面含有许多小技巧。
实现代码如下:

#include<bits/stdc++.h>
using namespace std;

int main()
{
 while(1)
 {
    cout<<"输入十进制数"<<endl;///****************1.输入
    string str;
    cin>>str;
    int len=str.size();

    for(int i=0;i<len;i++)///****************2.异常处理
    {
        if(str[i]<48||str[i]>57) //0的ascll码是48,9的ascll码值为57
        {
            cout<<"输入了非法字符"<<endl;
            return 0;
        }
    }

    string result=""; ///****************3.正式处理
    string hex="0123456789abcdef";
    int i=0;
    char cnt2='0';

    while(1)
    {
       while(i<len&&str[i]=='0')
           i++;

       if(i>=len)
        break;

       int cnt=0;
       for(;i<len;i++)
       {
           int sum=cnt*10+(str[i]-'0');
           str[i]=char(sum/16+'0');  //因为sum不会超过159,sum/16不会超过10,不会超过8位二进制表示,
           cnt=sum%16;                  //因此不会因为int转成char被截断而有误差。
           cnt2=hex[sum%16];
       }

       i=0;
       result=cnt2+result;
    }

    if(result=="")  //输入为0的时候,结果就是0;
    {
        cout<<0<<endl;
        return 0;
    }

    cout<<result<<endl;

 }
    return 0;
}

解题2:运用java中的BigInteger类

package systemconvert10_16;
import java.util.Scanner;
import java.math.BigInteger;

public class convert10_16{
	 public static void main(String[] args) {
		 
		    Scanner scanner10=new Scanner(System.in);
			String str=scanner10.nextLine();
			 
			String result=new java.math.BigInteger(str,10).toString(16);
			
			System.out.println("16进制结果为:"+result);
			scanner10.close();
	 }
}

String outputstr=new BigInterger(str,radix1).toString(radix2);

str:要转换的数(string类型);
radix1:要转换的数的进制;
radix2:目标进制。

返回大整数类型数据的字符串表示结果

参考博客:

大整数除法(进制转换)
https://blog.csdn.net/chengsilin666/article/details/81412162


利用java中的BigInteger实现进制转换
https://www.cnblogs.com/numen-fan/p/6500914.html

java中的BigInteger(很好很强大)(转)
https://blog.csdn.net/w00w12l/article/details/7290750

 

猜你喜欢

转载自blog.csdn.net/Ideaddxxpp/article/details/90183498