函数+进制转换器

一.运行截图

注释:正常操作由二进制数转换为八进制数。

注释:如果输入输出前后进制类型相同,输出输入的值。

注释:如果输入进制类型不是规则给定的,输出错误。

注释:如果输入进制类型不是规则给定的,输出错误。

注释:如果输入的数与该数进制类型不符,输出错误。

二.函数介绍

①二进制→八进制

void twoTOeight(int x){
    if(x%10>1){
        printf("ERROR!");
        return;
    }
    int  result1=0,result2=0,i=0,remainder;
    while(x!=0){
        remainder=x%10;
        result1+=remainder*pow(2,i);
        i++;
        x=x/10;
    }
    i=1;
    while(result1!=0){
        result2+=(result1%8)*i;
        result1=result1/8;
        i=i*10;
    }
    printf("转换成功!\n结果为:%d",result2);
}

思路:首先判断输入的数是否合法,再将输入的数转为十进制,再转为八进制。

②二进制→十进制

void twoTOten(int x){
    if(x%10>1){
        printf("ERROR!");
        return;
    }
    int result1=0,i=0,remainder;
    while(x!=0){
        remainder=x%10;
        result1+=remainder*pow(2,i);
        i++;
        x=x/10;
    }
    printf("转换成功!\n结果为:%d",result1);
}

思路:首先判断输入的数是否合法,再将输入的数转为十进制。

③八进制→二进制

void eightTOtwo(int x){
    if(x%10>7){
        printf("ERROR!");
        return;
    }
    int result1=0,result2=0,i=0,remainder;
    while(x!=0){
        remainder=x%10;
        result1+=remainder*pow(8,i);
        i++;
        x=x/10;
    }
    i=1;
    while(result1!=0){
        result2+=(result1%2)*i;
        result1=result1/2;
        i=i*10;
    }
    printf("转换成功!\n结果为:%d",result2);
}

思路:首先判断输入的数是否合法,再将输入的数转为十进制,再转为二进制。

④八进制→十进制

void eightTOten(int x){
    if(x%10>7){
        printf("ERROR!");
        return;
    }
    int result1=0,i=0;
    while(x!=0){
        result1+=(x%10)*pow(8,i);
        i++;
        x=x/10;
    }
    printf("转换成功!\n结果为:%d",result1);
}

思路:首先判断输入的数是否合法,再将输入的数转为十进制。

⑤十进制→二进制

void tenTOtwo(int x){
    int result1=0,i=1;
    while(x!=0){
        result1+=(x%2)*i;
        x=x/2;
        i=i*10;
    }
    printf("转换成功!\n结果为:%d",result1);
}

思路:直接由十进制转为二进制。

⑥十进制→八进制

void tenTOeight(int x){
    int result1=0,i=1;
    while(x!=0){
    result1+=(x%8)*i;
    x=x/8;
    i=i*10;
    }
    printf("转换成功!\n结果为:%d",result1);
}

思路:直接由十进制转为八进制。

三.main函数

int main()
{
    int system1,system2,x;
    printf("输入待转换值为何进制数\n");
    printf("二进制输入2;八进制输入8;十进制输入10\n");
    printf("输入进制数:");
    scanf("%d",&system1);
    if(system1!=2&&system1!=8&&system1!=10){
        printf("ERROR!");
        return 0;
    }
    printf("输入转换后的数为何进制数\n");
    printf("二进制输入2;八进制输入8;十进制输入10\n");
    printf("输入进制数:");
    scanf("%d",&system2);
    if(system2!=2&&system2!=8&&system2!=10){
        printf("ERROR!");
        return 0;
    }
    printf("输入待转换数:");
    scanf("%d",&x);
    if(system1==2&&system2==8){
        twoTOeight(x);
    }
    if(system1==2&&system2==10){
        twoTOten(x);
    }
    if(system1==8&&system2==2){
        eightTOtwo(x);
    }
    if(system1==8&&system2==10){
        eightTOten(x);
    }
    if(system1==10&&system2==2){
        tenTOtwo(x);
    }
    if(system1==10&&system2==8){
        tenTOeight(x);
    }
    if(system1==system2){
        printf("你想这么玩吗,那答案就是%d",x);
    }
    return 0;
}

 四.思维导图

 五.问题解答

问题①:如何使输入不合本程序规则的进制类型输出错误。如,输入七进制,输出ERROR!

解决方案:

scanf("%d",&system1);
    if(system1!=2&&system1!=8&&system1!=10){
        printf("ERROR!");
        return 0;
    }

若输入的值不是2或8或10,输出ERROR!

问题②:如何输入不符进制类型的待转换数输出错误。如,输入二进制,输入19,输出ERROR!

解决方案:

if(x%10>1){
        printf("ERROR!");
        return;
    }

在每个函数之前(除10进制,系统已默认十进制所以不需要)加入该代码,二进制余数大于1,八进制余数大于7,即可满足要求。

六.代码互评

void Numchange(int m, int b)//将10进制数转化为任意进制数
{

    int n = m;
    int count = 0;
    if (m == 0) printf("0");
    while (n != 0)
    {
        n = n / b;
        count++;
    }
    int number;
    for (int i = count; i >= 1; i--)
    {
        number = m / (int)pow(b, i - 1);
        if (number < 10) {
            printf("%d", number);
        }
        else {
            printf("%c", number + 55);
        }
        m = m % (int)pow(b, i - 1);
    }
}

可以看出他的代码的范畴更广,不像我局限于指定由何进制转换为何进制,他的代码可以让10进制转换为任意进制,而其他的进制又比较容易转为十进制,可以看出这个代码已经基本完成了任意进制转换为任意进制,灵活性非常高,而这种灵活性是学习代码,使用代码所必要的,是我非常需要学习和改进的地方。

七.总结

 1.学会如何从二进制转换为其他进制,反之亦然。

 2.在代码互评中明白了代码不仅要对,还要活,这是我必然要学习的地方。

 3.函数的应用使得我打代码时的思路更加的清晰,使主函数部分的代码变得清晰明朗,函数部分的代码也能更好的编写和体现。

 

原文地址:https://www.cnblogs.com/Tvoimvyan/p/11827528.html

时间: 2024-07-28 21:52:52

函数+进制转换器的相关文章

2~16进制间任意进制转换器

一.程序运行截图(仅列举部分) 正数: (1)10->8 (连续五次不输入程序会自动结束哦) (2)10->2 (3)16->10 (4)8->16  负数: (1)10->2 (2)10->2 (3)8->16  二.扩展功能 1.可以识别正负数并输出,当输出为二进制时会自动将其补为有符号位的八位或十六位. 2.能在2至16所有进制间任意转换: 3输入错误时会报错并让你重新输入: 4.加了一个没卵用的随机数来使最后一句话随机输出. 三.介绍函数及其使用的全局变量

我学C#的第一天之进制转换器

两天的时间实现了一个功能——进制转换器 今天最大的收获就是如何在文本框中限制输入 如下: private void txtDecimal_KeyPress(object sender, KeyPressEventArgs e) { if ("1234567890".IndexOf(e.KeyChar) == -1 && e.KeyChar != 8) e.Handled = true; 这比在textBox文本中用Message.Show方便且没有bug.

进制转换器

1 /* 2 进制转换器 3 P进制数x转为Q进制数z 4 过程模拟,先转十进制再转目标进制 5 */ 6 #include<cstdio> 7 #include<algorithm> 8 #include<stack> 9 using namespace std; 10 int main(){ 11 int p,q; 12 int x,y=0,z; 13 int a=1; 14 stack<int> sta; 15 scanf("%d%d%d&q

数据结构12: 实践项目之进制转换器

进制转换器项目要求:用户提供需要转换的数据和该数据的进制,以及要转换的进制,进制转换器提供给用户最终的正确转换的结果. 转换器实例 例如,用户提供了一个十进制数:10,要求将此数据以二进制形式转换,则通过进制转换器转换的最终结果应该:1010. 提示:此进制转换器可以在 2-36 进制之间对数据进行任意转换.各进制中对应的数字如下表: 设计思路 当用户给定 2 - 36 进制中的任意一进制数时,最简单的方法是使用顺序存储结构进行存储,即使用字符串数组存储. 转化时,最直接的思路就是先将该数转化为

Python内置函数进制转换的用法

使用Python内置函数:bin().oct().int().hex()可实现进制转换. 先看Python官方文档中对这几个内置函数的描述: bin(x)Convert an integer number to a binary string. The result is a valid Python expression. If x is not a Python int object, it has to define an __index__() method that returns a

使用qt写的进制转换器

没有使用什么数据结构,直接使用qt自带的进制转换函数, 实时出结果,代码在后面的链接中,由于初学qt,好多不会,代码构造就有点乱 截图如下 代码 http://pan.baidu.com/s/1Ppwxo

Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)

使用Python内置函数:bin().oct().int().hex()可实现进制转换. 先看Python官方文档中对这几个内置函数的描述: bin(x)Convert an integer number to a binary string. The result is a valid Python expression. If x is not a Python int object, it has to define an __index__() method that returns a

进制转换器beta 1

一.运行截图 二.拓展功能 检测进制数是否错误,若输错后无需返回菜单重新进行选择进制转换选项,可直接重新输入所需要转换的进制数 三.函数&功能 1.menu函数 void menu() //菜单 { printf(" \\ 我是菜单 / \n"); printf(" (?ì _ í?) \n"); printf(" ——————十进制转换二进制 [1]—————— \n"); printf(" \\ 十进制转换八进制 [2] /

【曾经】进制转换器C#

1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 11 namespace nu