| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7315 人关注过本帖
标题:自己编写的一个10进制转化成二进制的代码 成功了
只看楼主 加入收藏
cqm9266
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
帖 子:174
专家分:186
注 册:2011-10-28
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:5 
自己编写的一个10进制转化成二进制的代码 成功了
但是我这个代码转化 要求10进制收到long int的限制 有高手给点新建议么#include<stdio.h>
long int change(long int n,long int sum)
{long int a,d,b=1,i;
if(n==1) return(sum+1);
else
{for(a=2,i=1;2*a<=n;a=2*a,i++);
     for(d=1;d<=i;d++) b=b*10;
     sum=sum+b;
     if(a==n)
         return(sum);
     else
     {b=1;change((n-a),sum);}
}
}
void main()
{printf("输入一个10进制的数字,请别太大 因为该算法局限有被long int局限\n");
long int n,sum;
scanf("%d",&n);
sum=change(n,0);
printf("输出的二进制是%d\n",sum);
}

搜索更多相关主题的帖子: include change return 二进制 
2011-12-12 13:28
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:5 
支持输入数据小于(10^100)
程序代码:
#include <stdio.h>
#include <stdlib.h>

int a[100],L;
char s[100];

void print(int *a)
{
     int tmp=a[0]%2,i;
     a[0]-=tmp;
     for (i=L-1; i>=0; i--)
     {
         if (a[i]%2==1)
         {
                       a[i]--; a[i-1]+=10;
         }
         a[i]/=2;
     }
     while (a[L-1]==0 && L>1) L--;
     if (L>1 || a[L-1]>0) print(a);
     printf("%d",tmp);
}
     
void change(char *s,int *a)
{
     L=strlen(s);
     int i; 
     for (i=0; i<L; i++) a[i]=s[L-1-i]-'0';
}

int main()
{
    printf("Input a Number(<=10^100:");
    gets(s);    //读入
    change(s,a);   // 把s中的字符转化为数字存进数组a里
    print(a);
    printf("\n");
    
    system("pause");
    return 0;
}

 


[ 本帖最后由 czz5242199 于 2011-12-12 15:32 编辑 ]
2011-12-12 15:21
饭桶
Rank: 6Rank: 6
等 级:侠之大者
帖 子:165
专家分:422
注 册:2011-4-5
收藏
得分:5 
程序代码:
/*这个程序是用回来对各种进制之间的转换(2到32),由于我是初学者,所以不考虑小数*/
#include "stdio.h"
#include "math.h"
#include "string.h"
#define N 32
int pow1(int a,int b) /*次函数的功能类似有math.h中的pow,但本函数返回的是整数*/
       { int c;
         if(b==0) return 1;
         if(b>0) c=a*pow1(a,b-1);
         return c;
       }

 void f(int sum,int c,char *p,int i)/*此函数用来确定转换后的数字的各个位数上的数*/
       { int j,n;             
         for(n=i;n>=0;n--)
         for(j=0;j<c;j++)
         if(sum<(pow1(c,n)*(j+1))&&sum>=(pow1(c,n)*j)) { *(p+i-n)=j,sum=sum-pow1(c,n)*j;break;}
         *(p+i+1)=0;
        
       }
int w(int sum,int c)/*此函数用来判断转换后的数字有几位(i+1)*/
       {int i;
        for(i=0; ;i++)
         {
          if((sum<pow1(c,i+1))&&(sum>=pow1(c,i))) break; 
         }
        return i;
       }

     
main()
{int a,c,i,sum,j,k,l,flag;

 char b[N]={0},h[32]={0};

 for(;;)

 {sum=0;flag=0;
  printf("***************************************************\n");
  printf("**            ^_^  WELCOME  ^_^                  **\n");
  printf("***************************************************\n");
  for(;;)
  { flag=0;
    printf("\n      请输入你所要转换的整数(输入0退出):");
    scanf("%s",b);  l=strlen(b);   if(!strcmp(b,"0")) break;
    for(i=0;b[i]!=0;i++)  /*由于输入的是字符,所以用以下转换*/
    {  if(b[i]>='0'&&b[i]<='9')
          b[i]-='0';
       if(b[i]>='a'&&b[i]<='z')
          b[i]=b[i]-'a'+10;
       if(b[i]>='A'&&b[i]<='Z')
          b[i]=b[i]-'A'+10;
    }
    for(;;)
       { printf("\n        你所输入的数的进制为(2到32):");
         scanf("%d",&a);
         if(a<2||a>32)
          {printf("\n          您的输入有误,请重新输入!\n");
           continue;
          }
         break;
        }
    for(i=0;i<l;i++)
      if(b[i]>=a)  
         {printf("\n          您的输入有误,请重新输入!\n");
          flag=1;
          break;
         }
    if(flag==1) continue;
    break;
  }
  if(!strcmp(b,"0")) break;
  for(;;)
   {
    printf("\n请输入你要把该数转换为的进制(2到32):");
     scanf("%d",&c);
    if(c<2||c>32)
       {printf("\n          您的输入有误,请重新输入!\n");
        continue;
       }
    break;
   }   
  for(j=0;j<l;j++)
     sum=sum+pow1(a,j)*b[l-j-1]; /*把输入的数字转换为十进制数*/
  if(c==10) 
    {printf("\n   把该数字从%d进制转化到%d 进制为:%d\n",a,c,sum);
     continue;
    }
  i=w(sum,c); /*判断最高位*/
  f(sum,c,h,i); 
   for(k=i;k>=0;k--) /*以下转换是把相应的数字转换为字符*/
    {  if(h[k]>=0&&h[k]<=9)
          {h[k]=h[k]+'0';continue;}
       if(h[k]>=10&&h[k]<=35)
          {h[k]=h[k]+55;continue;}
    }
   printf("\n   把该数字从%d进制转化到%d 进制为:",a,c);puts(h);

 }
}

各进制之间的转换.rar (32.66 KB)


[ 本帖最后由 饭桶 于 2011-12-12 17:48 编辑 ]

人得一生得奋斗!
2011-12-12 17:45
cqm9266
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
帖 子:174
专家分:186
注 册:2011-10-28
收藏
得分:0 
虽然看不懂 但还是谢谢你了 感谢!

没病的人说有病的人有病,有病的人说没病的人有病。到底是谁有病?
2011-12-12 20:36
leenchow
Rank: 2
等 级:论坛游民
帖 子:17
专家分:18
注 册:2010-3-29
收藏
得分:0 
#include "stdio.h"

#define LONG sizeof(long)*8

int main(void)
{
    long l;
    int i;
    int binary[LONG];
   
    scanf("%ld",&l);

    for(i=0;i<LONG;i++)
      binary[i] = ((l & (1 << i)) ? 1 : 0);

    for(i=LONG-1;i>=0;i--)
       printf("%d",binary[i]);
                        
    getch();
    return 0;
}
2011-12-19 16:03
乱世小蝴蝶
Rank: 2
等 级:论坛游民
帖 子:13
专家分:17
注 册:2011-9-16
收藏
得分:0 
学习
2011-12-19 16:50
快速回复:自己编写的一个10进制转化成二进制的代码 成功了
数据加载中...
 
   



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

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