首页 > 其他分享 >进制转化复习( 万能的a进制转化为b进制)

进制转化复习( 万能的a进制转化为b进制)

时间:2023-04-01 14:56:51浏览次数:43  
标签:10 进制 16 int number 转化 十进制 复习

进制转化复习

十进制转化为十六进制

Description

  十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
  给出一个非负整数,将它表示成十六进制的形式。

Input

输入描述:
  输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647
输入样例:
30

Output

输出描述:
  输出这个整数的16进制表示
输出样例:
1E


#include <bits/stdc++.h>
using namespace std;
const int N = 20;
int a[N];
int n;
int cnt;
int main()
{
	cin>>n;
	
	char b[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
	
	do
	{
		a[cnt++]=n%16;
		n/=16;
	}while (n);
	
	for (int i=cnt-1;i>=0;i--)
	{
		int index = a[i];
		cout<<b[index];
	}
	puts("");
	return 0;
}

十进制转化为二进制(除留余数法)

#include <bits/stdc++.h>
using namespace std;
const int N = 35;
int n;
int a[N];
int cnt;
int main()
{
	cin>>n;
	
	do{
		a[cnt++]=n%2;
		n/=2;
	} while (n);
	
	for (int i=cnt-1;i>=0;i--)
		cout<<a[i];
	puts("");
	return 0;
}

十六进制转化为十进制

#include <bits/stdc++.h>
using namespace std;
int main()
{
	
		string a_line,b_line;
		cin>>a_line;
		vector<int>num;
		for (auto c:a_line)
		{
		    if (c>='A'&&c<='F') num.push_back(c-'A'+10);
		    else num.push_back(c-'0');
		}
		
		reverse(num.begin(),num.end());
		vector<int>ans;
		while (num.size())
		{
			int r=0;
			for (int i=num.size()-1;i>=0;i--)
			{
				num[i]+=r*16;
				r=num[i]%10;
				num[i]/=10;
			}
			ans.push_back(r);
			while (num.size()&&num.back()==0) num.pop_back();
		}
		
		reverse(ans.begin(),ans.end());
		for (auto x:ans) cout<<x;
		cout<<endl;
	return 0;
}

a进制转化为b进制

编写一个程序,可以实现将一个数字由一个进制转换为另一个进制。

这里有 $ 62 $ 个不同数位 $ {0-9,A-Z,a-z} $。

输入格式

第一行输入一个整数,代表接下来的行数。

接下来每一行都包含三个数字,首先是输入进制(十进制表示),然后是输出进制(十进制表示),最后是用输入进制表示的输入数字,数字之间用空格隔开。

输入进制和输出进制都在 $ 2 $ 到 $ 62 $ 的范围之内。

(在十进制下)$ A = 10,B = 11,…,Z = 35,a = 36,b = 37,…,z = 61 $ ($ 0-9 $ 仍然表示 $ 0-9 $)。

输出格式

对于每一组进制转换,程序的输出都由三行构成。

第一行包含两个数字,首先是输入进制(十进制表示),然后是用输入进制表示的输入数字。

第二行包含两个数字,首先是输出进制(十进制表示),然后是用输出进制表示的输入数字。

第三行为空白行。

同一行内数字用空格隔开。

输入样例:

8
62 2 abcdefghiz
10 16 1234567890123456789012345678901234567890
16 35 3A0C92075C0DBF3B8ACBC5F96CE3F0AD2
35 23 333YMHOUE8JPLT7OX6K9FYCQ8A
23 49 946B9AA02MI37E3D3MMJ4G7BL2F05
49 61 1VbDkSIMJL3JjRgAdlUfcaWj
61 5 dl9MDSWqwHjDnToKcsWE1S
5 10 42104444441001414401221302402201233340311104212022133030

输出样例:

62 abcdefghiz
2 11011100000100010111110010010110011111001001100011010010001

10 1234567890123456789012345678901234567890
16 3A0C92075C0DBF3B8ACBC5F96CE3F0AD2

16 3A0C92075C0DBF3B8ACBC5F96CE3F0AD2
35 333YMHOUE8JPLT7OX6K9FYCQ8A

35 333YMHOUE8JPLT7OX6K9FYCQ8A
23 946B9AA02MI37E3D3MMJ4G7BL2F05

23 946B9AA02MI37E3D3MMJ4G7BL2F05
49 1VbDkSIMJL3JjRgAdlUfcaWj

49 1VbDkSIMJL3JjRgAdlUfcaWj
61 dl9MDSWqwHjDnToKcsWE1S

61 dl9MDSWqwHjDnToKcsWE1S
5 42104444441001414401221302402201233340311104212022133030

5 42104444441001414401221302402201233340311104212022133030
10 1234567890123456789012345678901234567890

image-20230401110332733

#include<bits/stdc++.h>
using namespace std;
int main()
{
    ios;
    int T;  //输入样例的个数
    cin >> T;
    while(T--)
    {
        //读入
        ios;
        int a,b;
        string a_line,b_line;

        cin >> a >> b>>a_line;  //由a进制转换成b进制 

        vector<int> number;     //number来存储由str转换成10进制的数据
        for(auto c : a_line)
        {
            if(c>='0' && c<='9') number.push_back(c-'0');     //str转int形数据,因为无需根据偏移量转换,所以是减去0
            if(c>='A' && c<='Z') number.push_back(c-'A'+10);  //通过与A的偏移量来进行转换
            if(c>='a' && c<='z') number.push_back(c-'a'+36);  //减去0到9和大写的26个英文字母的偏移量
        }
        reverse(number.begin(),number.end());   //存储时我们是把高位放在了下标为0的位置,y总习惯从低位到高位存,使位数和数组的下标一致

        vector<int> res;     
        while(number.size()) //numberz只要没被除成0就一直做 
        {
            int r = 0;      //余数
            for(int i = number.size() - 1; i >= 0; i--)
            {
                number[i] += r * a; // 当前这一位的值 是 :当前这一位的值 + 上一位的借位 * a  (因为一开始是a进制的,所以需要乘以a)
                r = number[i] % b;  //每一位再对b取余得到每一位
                number[i] /= b;  // 商的位 是number的位整除b的结果 
            }
            res.push_back(r); //最后的余数就是我现在的个位

            while(number.size() && number.back() == 0/*!number.back()*/) number.pop_back();   //删去前导0
        }

        reverse(res.begin(),res.end());  //因为短除法是push_back()的次序是 从上到下 的每一次余数,
                                            //但是我们输出的时候要逆序输出,所以再reverse一次
        for (auto x : res)  //如果是10进制以内的转换 我们直接输出就可以了现在,但是 这儿最高是62进制 要再进行一个转换!
        {
            if (x <= 9)                 b_line += char(x + '0');
            if (x >= 10 && x <= 35)     b_line += char(x + 'A' - 10);
            if (x >= 36)                b_line += char(x + 'a' - 36);
        }
        cout << a << ' ' << a_line << endl;
        cout << b << ' ' << b_line << endl;
        cout << endl;
    }
    return 0;
}



标签:10,进制,16,int,number,转化,十进制,复习
From: https://www.cnblogs.com/sdnu-dfl/p/17278610.html

相关文章

  • 线段树模板复习
    建树voidbuild(intl,intr,intrt){ if(l==r) { t[rt]=a[l]; return; } intmid=(l+r)>>1; build(l,mid,rt<<1); build(mid+1,r,(rt<<1)|1); t[rt]=t[rt<<1]+t[(rt<<1)|1];}标记下传voidpushdown(intl,intr,intrt){ if(lazy......
  • 实体类转化为DataTable,,DataTable 转换为List 集合
    点击查看代码///<summary>///C#List转换成DataTable///</summary>///<paramname="list"></param>///<returns></returns>publicstaticDataTableListToDataTable(IList......
  • 进制互转
    进制互转我们一般使用次方列的时候,不超过255我们用:1286432168421,如果超过了,我们就在128前补256我们用138和433这两个十进制数,做测试十进制转二进制256 128 64 32 16 8 4 2 1    --次方列要点,把十进制数按照次方......
  • 请求信息十六进制显示&请求信息AXCLL码显示
    请求信息十六进制显示 packageweb;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.ServerSocket;importjava.net.Socket;publicclassMyHttpServer{privatestaticintcount=1;privatestati......
  • CSS总复习(二)一些属性介绍
    CSS字体、文本样式指定字体不能指望用户的机器上一定安装了你想使用的字体。解决这个问题的方法是使用Web字体,我们可以直接下载Web字体并使用在自己的页面上,而不需要用户做什么。使用@font-face指定Web字体,如:@font-face{font-family:'MyFont';font-style:normal;......
  • CSS总复习(一)基础
    CSS是什么CSS(层叠样式表)用来规定HTML文档的呈现形式(外观和格式编排)。CSS样式由一条或多条以分号隔开的样式声明组成。每条声明包含着一个CSS属性和该属性的值,二者以冒号分隔。PS:书中有句话很nice:“笨蛋才会为完美的CSS方案纠缠不休”。因为一种效果的实现方式可能有很多种,你只要......
  • 基本背包问题复习(01背包,完全背包,多重背包,分组背包)
    背包问题,本质上就是给几种物品,每个物品有体积有价值,可能有个数限制有一个容量有限的背包,在背包能装下的前提下,能装的最大价值是多少 背包问题一般分为这几种:01背包:每件物品只有一个完全背包:每件物品有无限个多重背包:每件物品有Si个(有限个)分组背包:所有物品被分为多个组,每一组......
  • 前端基础小复习
    目录1.HTTP协议四大特性2.HTTP协议数据传输格式3.状态码4.基本选择器会前端基础在IT行业很有帮助,无论是做爬虫数据分析,解析数据,做数据清洗都有帮助,因为我准备做数据获取过程中发现浏览器的HTML看不懂,直接影响了我的工作进度,因此直接暂停,网页结构有三个部分组成的即HTML、CSS......
  • JAVA~适合新手和复习~基础七(线程)
    Java多线程编程一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。线程和进程关系:一个进程包括由操作系统分配的内存空......
  • #yyds干货盘点#将一维数据转化成tree
    将一维数组,转化成嵌套的treeconstarr=[{id:1,title:"child1",parentId:0},{id:2,title:"child2",parentId:0},{id:3,title:"child1_1"......