精华内容
下载资源
问答
  • C语言进制转换

    2021-05-12 23:31:03
    C语言进制转换 今天又遇到了一道进制转换题目 【问题描述】求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内 不同进制的表示符号为(0,1,....,9,A,B,C,D,E,F) 注意:...

    C语言进制转换

    今天又遇到了一道进制转换题目

    【问题描述】求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内
    不同进制的表示符号为(01....9,A,B,C,D,E,F)
    注意:不同进制可能不能直接转换,如八进制与十六进制
    【输入形式】输入只有一行,包含三个整数a,n,b。a表示其后的n是a进制整数,b表示欲将a进制整数n转换成b进制整数
    a,b是十进制整数,且2=<a,b<=16
    【输出形式】输出包含一行,为转换后的b进制整数
    输出时字符号全部用大写表示,即(01...9,A,B,C,D,E,F)
    【样例输入】15 AAB3 7
    【样例输出】210306
    【样例说明】15进制的数AAB3,转换为7进制后的数为210306
    

    不同于之前遇到的(16进制转10进制)
    今天的题目要求m进制转换为n进制
    然而CSDN上并未找到令我满意的答案
    经过一段时间的思索写出了大概的思路
    核心思路:将m进制转换为10进制,再将10进制转换为n进制
    具体代码如下

    //解法1
    #include<stdio.h>
    #include<string.h>
    void Reserve(int before,char * num,int after){
        int i,j,yu;//yu:余数
        long sum = 0;
        char tmp[30] = {0};
        for(i=0;i<strlen(num);i++){//before进制->10进制
            if(num[i]>='0' && num[i]<='9')sum = sum * before + (num[i] - '0');
            else sum = sum * before + (num[i] - 'A' + 10);
        }
        for(i=0;sum!=0;i++){//10进制->after进制
            yu = sum % after;
            sum /= after;
            if (yu >= 10)tmp[i] = yu - 10 + 'A';
            else tmp[i] = yu + '0';
        }
        i = i-1;
        j = 0;
        while(i >= 0)num[j++] = tmp[i--];
        num[j] = 0;
        printf("%s\n",num);
    }
    int main(){
        int a,b;
        char n[30];
        scanf("%d%s%d",&a,n,&b);
        Reserve(a,n,b);
        return 0;
    }
    
    //解法2
    #include<stdio.h>
    #include<string.h>
    void Reserve(int before,char * num,int after){
        int i,j,yu,p = 1;//yu:余数
        long sum = 0;
        char tmp[30] = {0};
        for(i=strlen(num)-1;i>=0;i--){//before进制->10进制
        	if(num[i]>='0' && num[i]<='9')sum += (num[i] - '0') * p;//逆序也比较妙
            else if(num[i]>='A' && num[i]<='Z')sum += (num[i] - 'A' + 10) * p;
            p *= before;
        }
        for(i=0;sum!=0;i++){//10进制->after进制
            yu = sum % after;
            sum /= after;
            if (yu >= 10)tmp[i] = yu - 10 + 'A';
            else tmp[i] = yu + '0';
        }
        i = i-1;//Attention!
        j = 0;
        while(i >= 0)num[j++] = tmp[i--];
        num[j] = 0;
        printf("%s\n",num);
    }
    int main(){
        int a,b;
        char n[30];
        scanf("%d%s%d",&a,n,&b);
        Reserve(a,n,b);
        return 0;
    }
    

    还可以有其他等等方式选择
    比如拆分为两个函数使用
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    总之,进制转换核心其实是字符的妙用
    出现不熟悉的进制就往10进制上面靠就ok
    加油一起努力💪

    展开全文
  • 题目描述】输入基数b(2<=b<=16)和正整数n(十进制),任务:输出n的b进制 #include<stdio.h> int main(){ char hex[16]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; int b, ...

    【题目描述】输入基数b(2<=b<=16)和正整数n(十进制),任务:输出n的b进制

    #include<stdio.h>
    int main(){
    	char hex[16]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
        int b, s, n,i=0;
        int a[100]={0};
        scanf("%d%d",&b,&n);
        while (n!= 0){
            int m = n%b;
            a[i++] = m;
            n = n / b;
        }
        for (i=i-1;i>= 0;i--){
        	s=a[i];
        	printf("%c",hex[s]);
        }
        return 0;
    }
    
    
    展开全文
  • 题目: 输入奇数整数的编号系统和偶数整数的第二个编号系统,接受最多由20个非负整数组成的数据集作为输入,并显示所有奇数到指定编号系统的转换,然后显示偶数到第二个指定编号系统的转换...
  • b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。 输出 可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后...
  • 沈阳航空航天大学课 程 设 计 报 告课程设计名称:C语言课程设计课程设计题目: 二、八、十、进制转换程序院(系):计算机学院专 业:计算机科学与技术(物联网方向)班 级学 号:姓 名:指导教师:完成日期:2014年3月...

    沈阳航空航天大学

    课 程 设 计 报 告

    课程设计名称:C语言课程设计

    课程设计题目: 二、八、十、进制转换程序

    院(系):计算机学院

    专 业:计算机科学与技术(物联网方向)

    班 级学 号:

    姓 名:

    指导教师:

    完成日期:2014年3月7日

    目 录

    第1章 需求设计1

    1.1 课程设计任务1

    1.2 设计环境与开发语言1

    第2章 程序设计2

    2.1 概要设计2

    2.1.1总体模块图2

    2.1.2函数2

    2.2 详细设计2

    第3章 程序调试分析4

    3.1 出现的错误4

    3.2 运行的结果4

    第4章 用户手册5

    4.1 程序功能5

    4.2 存在的缺陷5

    参考文献6

    附 录(程序清单)7

    第1章 需求设计

    1.1 课程设计任务

    设计一个简单的程序,可以实现以下各进制之间的转换。

    1.因为要进行进制间的6次转换所以要采用switch语句有选择的进行进制转换程序。

    2.二进制到八进制;直接将二进制转化为八进制需要三位一截取不足三位补零,较为麻烦所以采用先将二进制转化为十进制再转化为八进制的方法解决问题。二进制转化为十进制将输入的二进制数存入字符数组中,存入多少位数,求出相应位数2的幂次再乘以1或0将每一位对应得到的十进制数累加,即可得到相应的十进制数。将十进制数转化为八进制数,将0到7存到一个字符数组中判断输入的数是否大于7若大于7,则将该数除8,再次进行判断,直到输入的数小于等于7,输出该数对8取余数对应的一维数组中的字符,即可得到八进制数。

    3.二进制到十进制;二进制转化为十进制将输入的二进制数存入字符数组中,存入多少位数,求出相应位数2的幂次再乘以1或0将每一位对应得到的十进制数累加,即为十进制数。

    4.二进制到十六进制;与二进制转化为八进制类似,先将二进制转化为十进制。再将十进制数转化为十六进制数,将0到9,A到F存到一个字符数组中判断输入的数是否大于15若大于15,则将该数除16,再次进行判断,直到输入的数小于等于15,输出该数对16取余数对应的一维数组中的字符,即可得到十六进制数。

    5.八进制到十进制;八进制转化为十进制将输入的八进制数存入字符数组中,存入多少位数,求出相应位数8的幂次再乘以该位数上的数,再将每一位对应得到的十进制数累加,即为十进制数。

    6.十六进制到十进制;十六进制转化为十进制将输入的十六进制数存入字符数组中,存入多少位数,求出相应位数16的幂次再乘以该位数上的数,再将每一位对应得到的十进制数累加,即为十进制数。因为输入十六进制数会有A到F大小写之分,所以要分情况用到if语句的嵌套。要注意A到F字符减掉‘A’后要加10,再乘以16的对应次幂。

    7.十进制到二进制;采用递归语句和if嵌套语句,当输入的数大于1时除以2再次进行判断,直到输入的数小于等于1,输出该数对2取余的值,因为运用递归,所以会不断输出1或0,即可得到二进制数。

    要求:

    (1)使用C语言完成编码和调试,通过检查;

    (2)使程序在VC++6.0下运行;

    1.2 设计语言与开发环境

    设计环境:(1)WINDOWS 7系统

    (2)VisualC++开发环境

    开发语言:C语言

    第2章 程序设计

    2.1 概要设计

    2.1.1总体模块图

    2.1.2 函数

    主函数(main)的功能是调用menu函数,实现各函数的运行。

    二进制到八进制函数(TwotoE)的功能是将二进制转换到八进制。

    二进制到十进制函数(hs)的功能是将二进制转化到十进制。

    二进制到十六进制函数(TwotoS)的功能是将二进制转化到十六进制。

    十进制到二进制函数(showbit)的功能是将十进制转化为二进制。

    八进制转化成十进制函数(EtoT)的功能是将八进制转化成十进制。

    十六进制转化成十进制函数(StoTen)的功能是将十六进制转化成十进制。

    2.2 详细设计

    主函数:

    控制整个程序的运行,控制菜单操作,通过主函数分别调用各个模块,实现各项功能,如下图2.1所示。

    g=1 g=2 g=3 g=4 g=5 g=6 g=其他数

    图2.1主函数流程图

    注释:

    (1)先定义整型变量g;

    (2)用switch case语句选择操作,调用函数;

    (3)g等于1,则调用EtoT函数;

    (4)g等于2,则调用StoTen函数;

    (5) g等于3,则调用showbit函数;

    (6) g等于4,则调用hs函数;

    (7) g等于5,则调用TwotoE函数

    展开全文
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼在数据结构课关于栈的这一章中,我们都学过用“模2取余法”来将一个10进制转换为一个二进制数,进而可以推广到“模n取余法”,经其转换为n进制(n任意指定)。...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    在数据结构课关于栈的这一章中,我们都学过用“模2取余法”来将一个10进制数转换为一个二进制数,进而可以推广到“模n取余法”,经其转换为n进制(n任意指定)。

    确实,这是一个很基础的题目,可你是否想过如果这个10进制数是一个大数(其位数可能上千位,此时用一般数据类型肯定是会溢出的),那么这个问题又如何来求解呢?

    当然,也许你会说很简单嘛,自己写一个大数类(当然至少要写一个大数除法才行),或者你用的是Java这种现代化语言,就更轻松了,直接用BigInteger这样的大数类就可以来表示一个大数,进而用书上教的方法来实现。

    但是,真的需要用到大数类吗?事实上,“杀鸡焉用牛刀“,我们在纸上模拟一番上述运算后就可以发现,只要做一些小小的改进,就可以在不使用大数的情况下,也可以通过“模n

    取余”的原理来实现大数的进制转换的。(当然,整体的思想仍然是“模n取余”原理!!!)。

    举个简单的例子,就比如说把10进制数12转换为2进制形式,书上的方法可以用下图来表示

    612eb6f3866b7d7f09c1f9cb74789d0e.png

    按照 “先余为低位,后余为高位“这条铁律,其结果为1100.

    这是书上教我们的常规思路(可惜按这个的话,大数是没法考虑的,因为假如这里不是12,而是一个1000位的大数,由于是是对大数的整体进行取余运算,不使用大数类及其

    除法操作,又如何得以进行呢?),可我们的目的是不使用大数类,那么现在我们就来换一个视角来看这个问题,12是一个十位数,十位上是1,个位上是2,按照我们正常的

    思维来看,这个计算应该是下面这样的:

    3c4d15160f1a38409526ab271cb24aa8.png

    那么我们发现在第一轮运算时,十位上的1作为被除数,2作为除数,得到的商是0,余数是1(可以断言只考虑当前这一个数位的计算,余数或是0,或是1,若是1的话,则进

    下一数位(这里即对个位进行运算)时,要用1乘上进制(这里是10)再加上下一个数位上的值(这里是2)),即得到运算进入个位时被除数是12,除数是2,得到的商是6,

    数是0。第一轮运算的结果是商是06,余数是0.

    进入第二轮运算,则上一轮的商6(这里首先要去掉前面多余的0)变成本轮的被除数,如此下去,即可得到每轮的余数。

    推广开来,如果被除数是一个1000位的大数,例如“12343435154324123……342314324343”

    那么我们照样可以从第一个数位开始逐位考虑,比如第一位是1(作为被除数),2是除数,得到的商是0,余数是1,然后是第二个数位2,由于上一位留下了余数1,则此时被

    除数应该是1*10+2 = 12,所以得到的商是6,余数是0,即运算到此时的商是06,然后是第三个数位3,由于上一个数位留下的余数是0,所以此时被除数就是3,。。。如此下去

    就完成第一轮的运算,这一轮完毕后,需要把得到的商变成下一轮的被除数,继续上述的运算,直到被除数为0才停止。

    下面给出了一个示例代码,展示了如何将一个10进制的大数转换为其二进制形式,仅供参考:

    #include

    #include

    char str[1000];//输入字符串

    int start[1000],ans[1000],res[1000]; //被除数,商,余数

    //转换前后的进制

    const int oldBase = 10;

    const int newBase = 2;

    void change()

    {//各个数位还原为数字形式

    int i,len = strlen(str);

    start[0] = len;

    for(i=1;i<= len;i++)

    {

    if(str[i-1] >= '0' && str[i-1] <= '9')

    {

    start[i] = str[i-1] - '0';

    }

    }

    }

    void solve()

    {

    memset(res,0,sizeof(res));//余数初始化为空

    int y,i,j;

    //模n取余法,(总体规律是先余为低位,后余为高位)

    while(start[0] >= 1)

    {//只要被除数仍然大于等于1,那就继续“模2取余”

    y=0;

    i=1;

    ans[0]=start[0];

    //

    while(i <= start[0])

    {

    y = y * oldBase + start[i];

    ans[i++] = y/newBase;

    y %= newBase;

    }

    res[++res[0]] = y;//这一轮运算得到的余数

    i = 1;

    //找到下一轮商的起始处

    while((i<=ans[0]) && (ans[i]==0)) i++;

    //清除这一轮使用的被除数

    memset(start,0,sizeof(start));

    //本轮得到的商变为下一轮的被除数

    for(j = i;j <= ans[0];j++)

    start[++start[0]] = ans[j];

    memset(ans,0,sizeof(ans)); //清除这一轮的商,为下一轮运算做准备

    }

    }

    void output()

    {//从高位到低位逆序输出

    int i;

    for(i = res[0];i >= 1;--i)

    {

    printf("%d",res[i]);

    }

    printf("\n");

    }

    int main()

    {

    scanf("%s",str);

    change();

    solve();

    output();

    return 0;

    }

    高精度进制转换模版:

    /*

    高精度进制转换

    把oldBase 进制的数转化为newBase 进制的数输出。

    调用方法,输入str, oldBase newBase.

    change();

    solve();

    output();

    也可以修改output(),使符合要求,或者存入另外一个字符数组,备用

    */

    #include

    #include

    #defien MAXSIZE 1000

    char str[MAXSIZE];//输入字符串

    int start[MAXSIZE],ans[MAXSIZE],res[MAXSIZE];//被除数,商,余数

    int oleBasw,newBase;//转换前后的进制

    //单个字符得到数字

    int getNum(char c)//这里进制字符是先数字,后大写字母,后小写字母的

    {

    if(c>='0'&&c<='9') return c-'0';//数字

    if(c>='A'&&c>='Z') return c-'A'+10;//大写字母

    return c-'a'+36;//小写字母

    }

    //数字得到字符

    char getChar(int i)

    {

    if(i>=0&&i<=9)return i+'0';

    if(i>=10&&i<=35)return i-'10'+'A';

    return i-36+'a';

    }

    void change()//把输入的字符串的各个数位还原为数字形式

    {

    int i;

    start[0]=strlen(str);//数组的0位存的是数组长度

    for(i=1;i<=start[0];i++)

    start[i]=getNum(str[i-1]);

    }

    void solve()

    {

    memset(res,0,sizeof(res));//余数位初始化为空

    int y,i,j;

    while(start[0]>=1)

    {

    y=0;i=1;

    ans[0]=start[0];

    while(i<=start[0])

    {

    y=y*oldBase+start[i];

    ans[i++]=y/newBase;

    y%=newBase;

    }

    res[++res[0]]=y;//这一轮得到的余数

    i=1;//找下一轮商的起始处,去掉前面的0

    while(i<=ans[0]&&ans[i]==0) i++;

    memset(start,0,sizeof(start));

    for(j=i;j

    start[++start[0]]=ans[j];

    memset(ans,0,sizeof(ans));

    }

    }

    void output()//从高位到低位逆序输出

    {

    int i;

    for(i=res[0];i>=1;i--)

    printf("%d",getChar(res[i]));

    printf("\n");

    }

    展开全文
  • ACM题目 1055: [二级C语言]进制转换 题目描述 编程,输入一个10进制正整数,然后输出它所对应的八进制数。 输入 无 输出 无 样例输入 10 样例输出 12 答案: #include<stdio.h> int main() { int n; scanf...
  • //题目:八进制转换为十进制 #include<stdio.h> #include<math.h> int main() { int i=0,n,tmp,sum=0; scanf("%d",&n); while(n) { tmp=n%10; n=n/10; sum+=tmp*pow(8,i); i++;...
  • 题目描述 给出一个十进制的正整数,输出它的二进制表示。 输入 有多行数据,每一行一个正整数,整数值在[1-100000000]之间。 输出 输出相应的二进制数.每一行输出对应每一行输入 样例输入 Copy 3 4 样例输出 Copy ...
  • C语言进制转换

    2018-11-30 22:04:56
    题目: #include &lt;stdio.h&gt; int main() { int n,a[100000],i,t; /*t为余数*/ while (scanf("%d",&amp;n)!=EOF) { for(i=0;n&gt;0;i++) { a[i]=n%2; n/=2; } for(i...
  • [二级C语言]进制转换

    2020-10-22 23:20:31
    题目描述 编程,输入一个10进制正整数,然后输出它所对应的八进制数。 样例输入 10 样例输出 12 代码
  • 题目:十进制 转 二进制 的算法 #include #include int main(void) { int number; int array[999]; int i = 0, j = 0, count = 0; printf("请输入一个整数:"); scanf("%d", &number); while(number/...
  • 本题要求实现一个函数,将正整数n转换为二进制后输出。 函数接口定义: void dectobin( int n ); 函数dectobin应在一行中打印出二进制的n。建议用递归实现。 裁判测试程序样例: #include <stdio.h> void ...
  • /* 烟台大学计算机学院 2016 作者:张威 完成日期:2016年12月1日 */ #include #include int main() { int n[1000],b,i=0,j; scanf("%d",&b); do { n[i]=b%2; b=b/2; i++;...
  • 进制转换 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 输入一个十进制数N,将它转换成R进制数输出。 输入 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和...
  •  将M进制的数X转换为N进制的数输出。   输入:   输入的第一行包括两个整数:M和N(2<=M,N<=36)。   下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出。   输出:  ...
  • 作为一名嵌入式程序员,进制转换是入门必修课,而学习计算机也是必须要懂的最基础知识。在很多博客上曾找到很多关于进制转换的程序例程,大多是根据自己需求的。要是能和win10计算器那样,只要输入一个进制数,其他...
  • C语言编程:进制转换

    千次阅读 2016-01-25 11:53:42
    看到几个要求数制转换题目。众所周知,人常用的是十进制,计算机常用的是二进制,为了观察方便,也常使用16进制表示二进制数。WINDOWS 中计算器,可以进行常用进制转换,但是它缺乏其它进制转换功能。为了学习...
  • 题目描述: 给定一个正整数,写出它的 8 进制表示。 输入描述: 多组输入,输入的第一行为一个正整数 n,表示接下来有 n 组数据,每一行为 1 个正整数 a (0 )。 输出描述: 对于每一组数据,求出 a 的 8 ...
  • C语言程序实现十进制转换为二进制

    万次阅读 热门讨论 2018-08-01 20:26:55
    进制转换为其他进制时,转换成几进制就除以几进制求余。 代码: #include "stdio.h" #define N 100 int main() { int n, a[N]; int i = 0; printf("请输入十进制数n:"); scanf_s(&...
  • C语言编程练习题_03进制转换 题目来源于网络,代码使用GCC编译运行通过。 输入一个十进制数N,将它转换成R进制输出 注:如果R进制大于10 可使用类似16进制的表示方法表示。 如10 = A ;11 = B ; 12 + C等 代码...
  • 时间限制:1 秒内存限制:32 兆特殊判题:否提交:3521解决:2058题目描述:...样例输入:789样例输出:71011来源:2008年华中科技大学计算机研究生机试真题思路:进制转换题不用多说了吧。代码:#include #inclu...
  • 题目描述 编程,输入一个10进制正整数,然后输出它所对应的八进制数。 输入 无 输出 无 样例输入 10 样例输出 12 #include <stdio.h> int main( ) { int num,m=0,a[100],i=0,k=0; //...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 246
精华内容 98
关键字:

c语言进制转换题目

c语言 订阅