将任意进制转换为十进制

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
  // 请在此输入您的代码

  char a[]="12";
  int ten=0;
  for(int i=0;i<strlen(a);i++)
  {
    ten=ten*2+a[i]-'0';
  }
  printf("%d",ten);
  return 0;
}
//这道题的精髓在于他把ten设置成了0,这就是很厉害的地方,从而实现了将每一位顺移上去

原理我不是很清楚,但是,我发现 ten=ten*2+a[i]-'0';这一串代码的神奇之处,它可以恰如其分的将最后的结果拆分为几个9,几个8,几个2,也就是相应的进制。

需要将这串代码牢牢记住,类似于一个伟大的定理。

这里为什么需要减去'0'呢,因为他将数组声明为char类型,因此,我们需要将char对应的转换为int类型,例如字符1对应49,字符0对应48,因此'1'-'0'刚好就是数值1。

'A'是65,'a'是97,由此对应上去,即可,按照字母的顺序。

int conver2ten(int a,int num)//a为即将转换的进制,num为即将转换的数字 
 {
     int b=0;//b用来将最后转换之后的数字返回
    int t;//用来暂时存储num的数位
    int i=0;//用于每次存储的进位
    while(num!=0)//分解结束的条件 
    {
        t=num%10;
        num/=10;
        b+=t*pow(a,i);//每转换一个数字,即将其乘以对应的数字 
        i++;
     } 
 }

这是一个转换函数,也有异曲同工之妙。

猜你喜欢

转载自blog.csdn.net/m0_67250370/article/details/130209634
今日推荐