数制转换
发表在C语言图书答疑 2010-12-17
是否精华
版块置顶:
在《C语言程序开发范例宝典》一书中关于n进制转换为十进制数:
#include<stdio.h>
#include<string.h>
main()
{
  long t1;
  int i,n,t,t3;
  char a[100];
  printf("input a number string:\n");
  gets(a);
  strupr(a);
  t3=strlen(a);
  t1=0;
  printf("input n(2 or 8 or 16):\n");
  scanf("%d",&n);
  for(i=0;i<t3;i++)
   {
     if(a[i]-'0'>=n&&a[i]<'A'||a[i]-'A'+10>=n)
     {
       printf("data error!\n");
       exit(0);
     }
     if(a[i]>='0'&&a[i]<='9')
       t=a[i]-'0';   
     else if(n>=11&&(a[i]>='A'&&a[i]<='A'+n-10))
     t=a[i]-'A'+10;
     t1=t1*n+t;  /*这个的算法是怎样的?*/
   }
   printf("the decimalism is %ld\n",t1);
}
这个程序让我很难理解,例如我输入二进制的1100,输出为12,我只知道是按0乘2的0次方+0乘2的1次方+1乘2的2次方+1乘2的3次方=0+0+4+8=12算出来,而t1=t1*n+t实在让人费解,是用什么算法的?有没有人能一步一步代入循环中计算出来好让我理解,谢谢。
分享到:
精彩评论 3
lsx
学分:0 LV1
TA的每日心情
无聊
2022-06-04 10:45:25
2010-12-17
沙发
我是这样算的,但是错的。
i=0时,t=a[0]-'0'=0,t1=0X2+0=0;
i=1时,t=a[1]-'0'=0,t1=0X2+0=0;
i=2时,t=a[2]-'0'=1,t1=0X2+1=1;
i=3时,t=a[3]-'0'=1,t1=1X2+1=3;
学分: LV1
2010-12-28
板凳
您好:
这是从高位向低位依次计算。你可以带入一个数看看,就会明白。例如1100
t1的初始值为0 第一次循环 得到的数是最高位的1  则t1=0*2+1 
然后进入下一轮循环  t1=(0*2+1)*2+1……
这样也可以转换为1*2的3次方+1*2的二次方……

主要的算法还是进制之间转换的思想: 当前位的值 乘以 权值 的当前位数减一次方
lsx
学分:0 LV1
TA的每日心情
无聊
2022-06-04 10:45:25
2010-12-29
地板
哦,原来我把数组的高位跟低位搞错了。。。
首页上一页 1 下一页尾页 3 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照