首页上一页 1 下一页尾页 3 条记录 1/1页
数制转换
发表在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实在让人费解,是用什么算法的?有没有人能一步一步代入循环中计算出来好让我理解,谢谢。
#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实在让人费解,是用什么算法的?有没有人能一步一步代入循环中计算出来好让我理解,谢谢。