-
2022-01-19 01:35:00
栈有两种存储结构,顺序存储和链式存储,我们在这采用顺序存储。那么我们需要定义一个结构体,结构体里面有个int类型的数组,还有一个top用来存储栈顶元素的下标。
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #define Maxsize 100 using namespace std; //顺序栈 typedef struct SqStack{ int data[Maxsize]; int top; }SqStack; //初始化 int Init_Sqstack(SqStack &S) { S.top=-1; } //进栈 bool push_SqStack(SqStack &S,int x) { if(S.top==Maxsize-1) return false;//栈满 S.data[++S.top]=x; return true; } //出栈 bool pop_SqStack(SqStack &S,int &x) { if(S.top==-1) return false; x=S.data[S.top]; S.top--; return true; } void show_SqStack(SqStack S) { for(int i=S.top;i>=0;i--) { printf("%d ",S.data[i]); } } int char_to_num(char *a,int x) { int n; int c=0; int b[100]; n=strlen(a); int sum=0; //printf("%d",n); for(int i=0;i<n;i++) { if(a[i]>='0'&&a[i]<='9') b[i]=(a[i]-'0'); else b[i]=(a[i]-'A'+10); } while(n) { n--; sum+=b[c++]*pow(x,n); //printf("%d\n",sum); } return sum; } int main() { SqStack S; Init_Sqstack(S); printf("请输入想要转化数的进制:"); int i; scanf("%d",&i); printf("\n请输入想转化的进制:"); int j; scanf("%d",&j); printf("\n请输入想要转化的数:"); char s[100]; scanf("%s", s); //printf(s);/* int m,x; m=char_to_num(s,i); while(m) { push_SqStack(S,m%j); m=m/j; } show_SqStack(S); //cout << "Hello world!" << endl; return 0; }
更多相关内容 -
C++:友好的任意进制转换代码实现
2021-06-21 15:43:30通过用户菜单选择需要转换的数字和任意进制 直接上代码了 #include<algorithm> #include<cmath> #include<string> #include<iostream> using namespace std; #include<stack> int _...通过用户菜单选择需要转换的数字和任意进制
直接上代码了
#include<algorithm> #include<cmath> #include<string> #include<iostream> using namespace std; #include<stack> int _sys=0; //进制 string _input(" ");//转换数字 //10进制转任意进制 void func2(){ //eg: 10 2 先输出最后的商然后倒序输出余数 cout<<"请输入要转换的数字"<<endl; cin>>_input; cout<<"请输入要转换的进制"<<endl; cin>>_sys; stack<int> s; int res=0; const char*p=_input.c_str(); int _num=atoi(p); //拿到数字10 int tmp; while(_num/_sys>=_sys){ s.push(_num%_sys); _num=_num/_sys; tmp=_num; } s.push(tmp%_sys); s.push(_num/_sys); while(!s.empty()){ cout<<s.top(); s.pop(); } } //任意进制转10进制 void func1(){ //eg: 1010 2 cout<<"请输入要转换的数字"<<endl; cin>>_input; cout<<"请输入要转换的进制"<<endl; cin>>_sys; const char *p=_input.c_str(); int _num=atoi(p); int res=0; int len=_input.size(); for(int i=0;i<len;++i){ res+=(_input[i]-48)*pow(_sys,len-1-i); } cout<<res<<endl; } void menu(){ cout<<"*********************************************"<<endl; cout<<"1. 任意进制转换10进制 2.10进制转换任意进制 "<<endl; cout<<"*********************************************"<<endl; } int main(){ int _sys; //进制 string _input;//转换数字 int _switch;//函数选择 menu();//选择菜单 cout<<"请输入要执行的功能"<<endl; cin>>_switch; switch(_switch){ case 1: func1(); break; case 2: func2(); break; default: cout<<"输入有误"; break; } return 0; }
-
C语言实现任意进制转换代码及解析
2019-02-26 20:23:48给定一个 M 进制的数 x,实现对 x 向任意的一个非 M 进制的数的转换。 问题分析 掌握不同数制间的转换关系是解决问题的关键,这里所说的数制一般包括二进制、八进制、十六进制及十进制。除了不同的数制还有下面几...问题描述
给定一个 M 进制的数 x,实现对 x 向任意的一个非 M 进制的数的转换。
问题分析
掌握不同数制间的转换关系是解决问题的关键,这里所说的数制一般包括二进制、八进制、十六进制及十进制。除了不同的数制还有下面几个必须要了解的概念。
基数:在一种数制中,只能使用一组固定的数字来表示数的大小,这组固定的数字的个数就称为该计数制的基数(Base)。例如十进制的基数为10,二进制的基数为2等。
权:又称为位权或权值,即每一个数位都有一个固定的基值与之相对应,称之为权。如十进制的个位对应的权值为1(100),十位对应的权值为10(101),百位对应的权值为100(102)。对于一个 M 进制的数来说,小数点左边各位上对应的权值从右到左分别为基数的0次方、基数的1次方、基数的2次方等,对于小数点右边各位上对应的权值从左到右分别为基数的-1次方、基数的-2次方等。
二进制、八进制、十六进制向十进制转换:按权展开相加。
十进制转换成二进制、八进制、十六进制:整数部分除以基数取余数(取余的方向为从后向前);小数部分乘以基数取整数(取整的方向为从前向后)。
二进制、八进制、十六进制相互转换:先转换成十进制再转换成其他进制;或者按照其对应关系进行转换(三位二进制数对应一位八进制数,四位二进制数对应一位十六进制数)。本例题按照前一种转换方式进行编程。
算法设计
十六进制是由 0~F 这一组固定的数字来表示,所以釆用字符数组进行存储。在进行输入输出时数组元素都是以字符的形式存在的,但是在进行数制转换时数组元素又以数值的形式存在,程序中用两个自定义函数 char_to_number 和 number_to_char 来实现字符与其对应数值之间的转换。
在执行程序时可以输入多组数据来验证程序的正确性,以前的程序都是多次运行,输入不同的数据来实现。对程序稍做改进,只运行一次程序但可以输入多组数据进行验证。解决这个问题只需要加一层循环,如果循环条件为真则继续输入数据,否则退出。循环条件为真即表达式的值不为0,这样可以声明一个变量假设为 flag,利用语句 while(flag){循环体} 来进行控制,当 flag 的值为1时可以接着输入,若为0则结束循环。
下面是完整的代码:
#include <stdio.h> #define MAXCHAR 101 /*最大允许字符串长度*/ int char_to_num(char ch); /*返回字符对应的数字*/ char num_to_char(int num); /*返回数字对应的字符*/ long source_to_decimal(char temp[], int source); /*返回由原数转换成的10进制数*/ int decimal_to_object(char temp[], long decimal_num, int object); /*返回转换成目标数制后字符数组的长度*/ void output(char temp[], int length); /*将字符数组逆序打印*/ int main() { int source; /*存储原数制*/ int object; /*存储目标数制*/ int length; /*存储转换成目标数制后字符数组的长度*/ long decimal_num; /*存储转换成的10进制数*/ char temp[MAXCHAR]; /*存储待转换的数值和转换后的数值*/ int flag = 1; /*存储是否退出程序的标志*/ while(flag) /*利用输入的flag值控制循环是否结束*/ { printf("转换前的数是:"); scanf("%s", temp); printf("转换前的数制是:"); scanf("%d", &source); printf("转换后的数制是:"); scanf("%d", &object); printf("转换后的数是:"); decimal_num = source_to_decimal(temp, source); length = decimal_to_object(temp, decimal_num, object); output(temp, length); printf("继续请输入1,否则输入0:\n"); scanf("%d", &flag); } return 0; } /*将字符转换成数字*/ int char_to_num(char ch) { if(ch>='0' && ch<='9') return ch-'0'; /*将数字字符转换成数字*/ else return ch-'A'+10; /*将字母字符转换成数字*/ } char num_to_char(int num) { if(num>=0 && num<=9) return (char)('0'+num-0); /*将0~9之间的数字转换成字符*/ else return (char)('A'+num-10); /*将大于10的数字转换成字符*/ } long source_to_decimal(char temp[], int source) { long decimal_num = 0; /*存储展开之后的和*/ int length; int i; for( i=0; temp[i]!='\0'; i++ ); length=i; for( i=0; i<=length-1; i++ ) /*累加*/ decimal_num = (decimal_num*source) + char_to_num(temp[i]); return decimal_num; } int decimal_to_object(char temp[], long decimal_num, int object) { int i=0; while(decimal_num) { temp[i] = num_to_char(decimal_num % object); /*求出余数并转换为字符*/ decimal_num = decimal_num / object; /*用十进制数除以基数*/ i++; } temp[i]='\0'; return i; } void output(char temp[], int length) { int i; for( i=length-1; i>=0; i--) /*输出temp数组中的值*/ printf("%c", temp[i]); printf("\n"); }
运行结果:
转换前的数是:17 转换前的数制是:10 转换后的数制是:2 转换后的数是:10001 继续请输入1,否则输入0: 1 转换前的数是:17 转换前的数制是:10 转换后的数制是:8 转换后的数是:21 继续请输入1,否则输入0: 1 转换前的数是:17 转换前的数制是:10 转换后的数制是:16 转换后的数是:11 继续请输入1,否则输入0: 1 转换前的数是:12122 转换前的数制是:8 转换后的数制是:10 转换后的数是:5202 继续请输入1,否则输入0: 0
-
各种进制转换最简单总结(附任意进制转换代码)
2022-03-26 15:35:1816和8之间的转换要通过2进制转换也可以,但其实转2的时候也是把每一位当成10进制数去除2取余得到每一位的二进制数最后连起来,值得注意的是转换顺序 比如7534(8)转成2进制 7转成2进制=0111,5%2=0101,3%2=0011...A进制转B进制
A=10?
1、A=10->A除B取余至余数为0,将余数从下往上连接即可;
2、A!=10->A从右往左第i位*A的i次方(i从0开始)转成10进制;
16和8之间的转换要通过2进制转换也可以,但其实转2的时候也是把每一位当成10进制数去除2取余得到每一位的二进制数最后连起来,值得注意的是转换顺序
比如7534(8)转成2进制
7转成2进制=0111,5%2=0101,3%2=0011,4%2=0100,然后把最高位的0去掉
得到的是111 101 011 100
再转为16进制1111->f 0101->5 1100->c
而其他进制则不能通过2进制进行转换,比如3进制的21转为2进制应该是111。不是通过2->0010,1->0001,而是先转为10进制21(3)->7(10)->111(2)
import java.util.Scanner; public class BaseConversion { public static void main(String[] args) { // TODO 自动生成的方法存根 Scanner in = new Scanner(System.in); System.out.println("请输入待转换数的进制(不能为0或负数):"); int A = in.nextInt(); while(A<=0) { System.out.println("都说了不能为负数或者0!请重新输入!"); A = in.nextInt(); } String N1 = in.nextLine(); System.out.println("请输入待转换数的值(请遵守进制规则):"); String Number = in.nextLine(); int Number_10 = 0; int pow = 1; for(int i = Number.length()-1;i>=0;i--) { int Asc = Number.charAt(i)-'0'; if(Asc>=0&&Asc<=9) { if(Asc>=A) { System.out.println("请遵守进制规则"); return; } Number_10 = Number_10+Asc*pow; pow = pow*A; }else if(Asc>=17&&Asc<=42) { if(Asc>=A) { System.out.println("请遵守进制规则"); return; } Number_10 = Number_10+Asc*pow; pow = pow*A; }else { System.out.println("请遵守进制规则"); return; } } System.out.println("请输入想要转换的进制(不能为0或负数):"); int B = in.nextInt(); StringBuilder re = new StringBuilder(); while(Number_10>0) { int yushu = Number_10%B; re.append(yushu); Number_10 = Number_10/B; } System.out.println("结果是:"+re.reverse()); } }
-
C语言任意进制转代码
2017-06-20 21:46:26初学者可能会用到,可以分享分享 -
C语言进制转换代码分享
2020-12-25 20:34:04代码很简单,功能也很简单,这里就不多... printf("请输入一个十进制数,我能帮您把它转换成2~16任意进制数:\n"); scanf("%d",&y); b=y; printf("请输入要转换为的进制:"); scanf("%d",&w); printf("\n"); do { -
Python 任意进制到任意进制转换 的实现代码
2021-01-25 18:15:21将一个数字 从任意进制 转换为 任意进制 的数值。 实现 Python2 def baseconvert(number, fromdigits, todigits): if str(number)[0] == '-': number = str(number)[1:] neg = 1 else: neg = 0 # make an... -
任意进制转换(c语言)
2022-05-29 21:32:16用函数实现将任意两种进制的数制相互转换。 输入格式: 输入在一行给出三个整数,第1个数为原数的进制(正整数),第2数为原数(或正或负整数),第3个数为需转换的进制(正整数)。 输出格式: 输出转换后的数。 ... -
Java 任意进制转换(两种方式)
2021-03-06 04:42:05本文提供两种Java实现任意进制转换的方法:方法一:利用 Integer 实现进制转换1、 Integer类的方法toBinaryString(),Integer.toOctalString(), Integer.toHexString()可实现十进制分别转换成二进制、八进制和十六... -
C语言实现十进制向任意进制转换
2018-12-27 11:21:40C语言实现十进制向任意进制转换代码,已经经过调试无问题。可以直接使用 -
十进制转换至任意进制数——C语言代码
2020-05-22 19:20:59课程的随堂作业,C语言的,用dev就能运行,萌新代码,勿喷,仅仅帮助不想写作业的朋友方便一下,反正老师也不会仔细检查的 -
任意进制转换为10进制,10进制转换成任意进制
2019-05-06 13:36:15任意进制转换为10进制,10进制转换成任意进制, -
C++任意进制转换源代码
2011-11-24 19:14:57源代码来的,经过运行唔错的,想交作业或者懒得去计算的可以下载去玩玩 -
Java 实现任意进制转换
2021-08-25 16:01:33(一)进制转换思想 先把任意进制转化为十进制 再把十进制转化为任意进制 本算法结合了十以下进制利用公式转换以及十以上进制调用函数转换 (二)问题分析 1.输入当前数进制 输入当前进制 m ,且保证 m>1 public ... -
C++任意进制转换
2014-12-04 09:54:46我的其他资源都是免费的,是对于c语言初学者的帮助比较大的,其中有单片机,ARM,数据结构,window编程,MFC编程,自己编写的小游戏。 -
任意进制之间的转换
2014-03-19 16:43:25这是一个可以实现任意进制之间转换的C语言代码。 -
python实现——任意进制转换
2020-11-11 00:32:45思路:先转换为十进制,再由十进制转换为目标进制。 代码: def scale_transform_decimalism(M, num): # 转换为十进制 str_dict = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' result = 0 j = 0 for i in range... -
Python中的进制转换代码(新手)
2021-10-17 20:32:25很多人在需要解决进制转换时计算很容易出错,前段时间这个问题可折磨的我很是头疼,为此看了一些资料加上自己的理解写了一个小程序,具体如下: 首先,python中有现成的转换函数可以利用 十进制转二进制:a=bin(b)... -
Python实现任意进制之间的转换
2020-12-11 19:32:15在编程过程中我们经常需要转换进制,虽然Python已经内置了常用进制转换函数,如int,bin,hex,oct;但是如果我们需要转换成其他进制怎么办呢?我们知道,十进制转换成二进制时,使用“除2取余,逆序排列”即可。二... -
Golang如何实现任意进制转换的方法示例
2020-09-21 03:27:15进制转换是人们利用符号来计数的方法,进制转换由一组数码符号和两个基本因素“基数”与“位权”构成,这篇文章主要给大家介绍了关于Golang如何实现10进制转换62进制的方法,文中给出了详细的示例代码供大家参考学习... -
C ++ 十进制转换任意进制代码
2022-04-21 21:13:06本例用的是10进制转换 26进制 #include <iostream> #include <vector> using namespace std; int main() { cout << "input:" << endl; int d; vector<int> a; cin >> d;... -
Java实现任意进制转换
2018-12-21 07:15:15实现代码: public class BinaryTest { ... //可以添加任意不重复字符,提高能转换的进制的上限 static char chs[] = new char[36]; static { for(int i = 0; i < 10 ; i++) { chs[i] = (char)('0' ... -
任意进制之间的转换 C语言
2020-07-30 18:33:26但是,当我们写代码来实现进制转换功能时,如果每两个进制之间都写一个函数就太麻烦了。所以,为了方便,我们在进制转换过程中,不过是几进制转换几进制,统统把原数据转换为十进制,然后再转换为目标进制。这样我们... -
栈的应用以及进制转换代码实现(C语言)
2021-11-08 11:38:26一.栈的应用(把二进制数转换成十进制数) -
任意进制转换十进制 -- c语言
2020-10-25 11:48:03任意进制转换十进制 – 数据结构c语言队列操作实现 代码也不算是任意进制,最高只能到十六进制。见谅! 代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXSIZE... -
C++ 基础编程之十进制转换为任意进制及操作符重载
2020-08-31 09:56:49主要介绍了C++ 基础编程之十进制转换为任意进制及操作符重载的相关资料,需要的朋友可以参考下 -
Python实现任意进制转换
2019-04-05 19:27:38这段代码能够实现任意进制的数据转换,并且,超过四位的数字还会适用"_"进行分割,便于多位数据的阅读。 进制格式说明 b --> 二进制 o --> 八进制 d --> 十进制 h --> 十六进制 由于format十六进制用x... -
Android代码-进制转换计算器
2019-08-07 18:52:07Radix 十进制,二进制,八进制,十六进制数相互转换的计算器,采用 Rxbinding实现 用到的开源库 RxJava 2.x RxAndroid butterknife RxBinding 界面预览 APK下载 CoolApk GooglePlay -
python代码实现进制转换
2022-05-09 13:51:13看完这篇妈妈再也不用担心我不会进制转换啦(*^▽^*)~~~