#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++;
}
}
这是一个转换函数,也有异曲同工之妙。