| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 28986 人关注过本帖
标题:二进制转换十进制,求更简便的代码~
只看楼主 加入收藏
lichence
Rank: 1
等 级:新手上路
帖 子:13
专家分:8
注 册:2009-10-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
二进制转换十进制,求更简便的代码~
自己的程序:
#include<math.h>
#include<stdio.h>
#include<string.h>
#define N 33
int input(int);
char a[N];                                                               
main()
{
    int i,n,sum=0;
   
    n=input(1);
    for(i=n-1;i>=0;i--)                                                    //二进制输入检错
    {
        if((a[i]-'0')!=1&&(a[i]-'0')!=0)
            n=input(0);
    }

    for(i=n-1;i>=0;i--)                                                    //二进制转换十进制
        sum+=(a[i]-'0')*((int)pow(2,n-1-i));
    printf(">>转换后的十进制数为:\n%d\n",sum);
}

int input(int m)
{
    printf(">>%s输入一个二进制数:\n",m?"请":"输入有误,请重新");
    scanf("%s",a);
    return strlen(a);
}

求比这个简便一点的程序,鸣谢。

[ 本帖最后由 lichence 于 2009-11-3 10:13 编辑 ]
搜索更多相关主题的帖子: 代码 十进制 二进制 
2009-11-03 10:12
流星雨
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:JAVA风暴
等 级:版主
威 望:43
帖 子:1854
专家分:1868
注 册:2004-5-30
收藏
得分:20 
你写得已经很简单了,呵呵。
C里边我不知道有没有转换的函数,只知道JAVA里有个函数toBinaryString(),可以转换,不过是10转2。
既然来了,就写个自己的想法

int change(char* a, int n) //n制的是位数,
{
int result=0;
for (int i=n-1; i>=0; i--)
{
if (!('1'==a[i]||'0'==a[i]))
{
result=0;
break;
}
result=result*2+(a[i]-'0');
}
return result;
}
没有编译器,只是个算法,仅供参考

感谢你们带我找到星空下美丽神话,无论经历多少苦痛也不放弃的梦;插上希望翅膀乘风我和你们飞翔,飞过海天尽头携手把梦想实现.....
2009-11-03 11:20
rexzheng
Rank: 2
等 级:论坛游民
帖 子:32
专家分:13
注 册:2009-10-26
收藏
得分:0 
我做的任意进制转换的。。。数码有123456789ABCD。。。。一直到Z
#include<stdio.h>
#include<math.h>
main()
{
    int a,b,x,i[50],j,g;
    char y,w;
   
N0:printf("要有几进制转换成几进制?用隔开,如10 2___:");
    scanf("%d\040%d%c",&a,&b,&w);
N1:printf("\n输入需要转换的整数");
   x=0;
   j=1;
   y=0;
    while(1)//输入,并把每位转成10进制
    {
        scanf("%c",&y);
        if(y==10)     
        {
            j--;
            g=j;
            goto N2;
        }
        
        if(y>='0'&&y<='9')
        {
            if(y>=a+'0')
        {
            printf("你选择的是%d进制,输入错误,重新输入",a);
            goto N1;
        }

            else i[j]=y-'0';
            j++;
        }
        if(y>='A'&&y<='Z')
        {            
            if(y>=a+'0'+7)
        {
            printf("你选择的是%d进制,输入错误,重新输入",a);
            goto N1;
        }

            else i[j]=y-'0'-7;
            j++;
        }
    }
//j等于位数
N2:while(j>=1)//将整个数转成10进制
    {
        x=x+i[j]*pow(a,g-j);
        j--;//g++;
    }
    //x为输入的数,j为0
   
    while(x>0)
    {
        i[j]=x%b;
        x=x/b;
        j++;
    }
    j--;
    //转换的数的最高位为j
    printf("转换成%d进制为:",b);
    while(j>=0)
    {
        if(i[j]<10)
        {
            printf("%c",i[j]+'0');
            j--;
        }
        else        
        {
            printf("%c",i[j]+'0'+7);
            j--;
        }

    }
    printf("\n输入新的数按y,重头开始按a,退出按任意键");
    scanf("%c%c",&w,&y);
    if(w=='y')goto N1;
    if(w=='a')goto N0;
}

如果要改成2转10的话。。就直接把一些变量改成定值就可以了。。哈哈
刚学C
2009-11-04 16:31
rexzheng
Rank: 2
等 级:论坛游民
帖 子:32
专家分:13
注 册:2009-10-26
收藏
得分:0 
哈哈 我的好复杂。。。!!
2009-11-04 16:38
Kiopler
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2017-6-8
收藏
得分:0 
int change(char *a, int n) {
    int result=0;
    while (*a != '\0' && ('1' == *a || '0' == *a))
        result = result << 2 + *a++ - '0';
    }
    return result;
}
2017-06-08 14:08
快速回复:二进制转换十进制,求更简便的代码~
数据加载中...
 
   



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

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