| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5468 人关注过本帖
标题:C语言输入n进制转换为十进制的问题
只看楼主 加入收藏
时光隧道wmc
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2016-3-28
结帖率:100%
收藏
已结贴  问题点数:14 回复次数:6 
C语言输入n进制转换为十进制的问题
//输入n进制转换为十进制
//main()
//{
//    long t=0;
//    int i,j,t1,t2,n;
//    char a[100];
//    printf("请输入数字");
//    gets(a);
//    strupr(a);//将小写转换成大写。
//    t2=strlen(a);
//    printf("请输入进制数");
//    scanf("%d",&n);
//    for(i=0;i<t2;i++)
//    {
//
//        if(a[i]-'0'>=n&&a[i]<'A'||a[i]-'A'+10>n)//判断输入的数据与进制数是否相等
//        {
//            printf("输入的数据有误,请重新输入");
//        }
//        if(a[i]>'0'&&a[i]<'9')//如果不是,就进行计算
//        {
//            t1=a[i]-'0';
//        }
//        if(a[i]>'A'&&a[i]<'A'+n-10)
//        {
//            t2=a[i]-'A'+10;
//        }
//        t=t2*n+t1;
//    }
//    printf("%l",t);
//
//}
搜索更多相关主题的帖子: 十进制 C语言 
2016-04-27 17:16
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:7 
看不懂你要问什么,要求做到什么,
2016-04-27 22:54
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:7 
看他题目,没看代码,估计是想做数值进制之间的转换,比如输入二进制的数输出十进制的数。输入8进制的输出十进制的,16进制的输出十进制的这样。
楼主你可以分别写二转十,八转十,十六转十,三个程序分别做为函数来调用。然后看三个程序是不是有共通点,再进一步优化代码;
至于三个函数算法,无非就是数学公式了。不知道的可以直接百度就可以完成的。
二进制转十进制需要写算法,八进制,十六进制好像可以通过格式控制符来直接输出。要注意的在输入的格式上要限制下。

[此贴子已经被作者于2016-4-28 10:25编辑过]

2016-04-28 08:39
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
给你参考下吧,有可能有BUG,你测试下看看。

#include <stdio.h>
int bin_dec()          //二进制转十进制
{
    int i,num=0;
    char str[100];
    printf("请输入要转换的二进制数:");
    scanf("%s",str);            // 读入的字符串,其实这里就是你想转化的二进制字符串
    for(i=0;str[i]!='\0';i++)     // 下面就是将字符串转化成二进制字符串了
    {
        if(str[i]=='1' || str[i]=='0')
        {
            num<<=1;
            num+=str[i]-'0';
        }
        else
        {
            printf("输入的不是二进制数\n");
            return 1;
        }
    }
    printf("bin:%s,\tdec:%d\n\n",str,num); //字符串表示二进制,10进制输出
}
int oct_dec()            //八进制转十进制
{
    int num=0;
    printf("请输入要转换的八进制数:");
    scanf("%o",&num);            //按八进制输入,字母欧,不是数字零
    printf("oct:%#o,\tdec:%d\n\n",num,num); //按八进制 10进制输出
 }   
int hex_dec()    //十六进制转十进制
{
    int num=0;
    printf("请输入要转换的十六进制数:");
    scanf("%x",&num);            //按十六进制输入
    printf("hex:%#X,\tdec:%d\n\n",num,num); //按16进制 10进制输出
}

int main( )
{
    int key=0;
    char ag;
    do{
        system("cls");
        printf("请按'1','2','3'选择进制转换:\n\n");
        printf("1:二进制转十进制\t");
        printf("2:八进制转十进制\t");
        printf("3:十六进制转十进制\n");
        scanf("%d",&key);
        switch(key)
        {
            case 1: bin_dec();
                    break;
            case 2: oct_dec();
                    break;
            case 3: hex_dec();
                    break;        
        }
        printf("是否再次进行转换'Y'OR'N'\n");
        scanf(" %c",&ag);          //%c前有个空格,可以吸收掉上一个scanf到缓存的回车
    }while('Y'==toupper(ag));
   
    return 0;
}



[此贴子已经被作者于2016-4-28 10:43编辑过]

2016-04-28 10:36
时光隧道wmc
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2016-3-28
收藏
得分:0 
回复 3楼 wanglianyi1
是的,多谢
2016-04-28 12:20
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
转换公式嘛
abc(n进制) --> 十进制
a*n^2 + b*n^1 + c*n^0
做法就是 把 abc 分离出来 然后各自乘以权值 最后再加起来

程序代码:
unsigned int NtoDecimal(char* str, int nBase)
{
    unsigned int nRes = 0;
    int nMask = 1;
   
    for(int nLen = strlen(str); nLen--;)
    {
        nRes += (str[nLen] - '0') * nMask;
        nMask *= nBase;
    }
    return nRes;
}
第一个参数 存储N进制数 第二个参数 表示 N进制
因为 对于同一个数据 比如 100
可以 是二进制
可以 是三进制
可以 是十六进制
所以需要第二个参数指定特定进制

https://zh.
2016-04-29 15:11
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 3楼 wanglianyi1
需要注意 N进制并不只有 二进制 八进制 十六进制 这三种可能性
还可以是 三进制 四进制
这些你的代码都无法处理

https://zh.
2016-04-29 15:12
快速回复:C语言输入n进制转换为十进制的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015950 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved