最近在为蓝桥杯做准备,碰巧看到进制转换题,就把所学的汇总了一下,加上自己的见解,希望对大家有帮助。
成都创新互联主营阜南网站建设的网络公司,主营网站建设方案,App定制开发,阜南h5微信小程序开发搭建,阜南网站营销推广欢迎阜南等地区企业咨询注:若需要输入二进制等其他进制数请先转化成十进制或利用输入格式如%o进行输入
附输出格式:
输出十进制:%d;
输出八进制;%o;
输出十六进制:%x;
输出单个字符:%c;
输出字符串:%s;
输出变量所在的地址:%p;
附其他进制转十进制代码:
#includeint main(){int x,p; //x输入数字 p该数的进制数
scanf("%d",&x);
scanf("%d",&p);
int y=0,product=1;
while(x!=0){y=y+(x%10)*product;
x=x/10;
product=product*p;
}
printf("%d",y);
return 0;
}
例:将十进制正整数转化为八进制
思路一:利用输出类型%o直接输出参考代码:
#includeint ChangeBase(){//个人习惯写单独函数在main中调用
int n=0;
scanf("%d",&n);//例:输入10
printf("%o",n);//例:输出12
return 0;
}
int main() {return ChangeBase();
}
思路二:利用短除法。具体思路:
从低位到高位计算数值同时通过取余和整除的优越性更新处理正整数,利用规律。
如:29十进制转8进制,对8取余得5保存a[0]为5,29整除8得3更新n为3,3对8取余得3保存a[1]为3,对8整除得0更新n为0,n=0时循环结束。逆向输出保存的数组为35.
注意事项:题目给定正整数所以没有考虑0和余数情况
参考代码:以十进制转8进制为例
#include#include#include#include#include#include#includeint ChangeBase(){//个人习惯写单独函数在main中调用
int n=0;//如果需要其他进制转换请用注解中的m替换8
//int m=0;
scanf("%d",&n);//例输入29
//scanf("%d",&m);
int flag=0;
int a[100]={0};//从低位到高位存放数据
while (n!=0){a[flag++]=n%8;//flag先计算再自增,从低位到高位计算数据
n/=8;//更新n
// a[flag++]=n%m;
// n/=m;
}
for (int i = flag-1; i >-1; --i) {printf("%d",a[i]);//从高到低输出例:35
}
return 0;
}
int main() {return ChangeBase();
}
思路三:利用头文件stdlib.h中的itoa函数进行整型和字符串转换具体用法:itoa函数(整型,字符串,转换进制)
注意事项:只能用整型作为转换对象,若要用无符号整数等类型可以参考使用
且需要引用
itoa() 将整型值转换为字符串
litoa() 将长整型值转换为字符串
ultoa() 将无符号长整型值转换为字符串
参考代码:
#include#include
int ChangeBase(){int n=0;
scanf("%d",&n);
char string[33]={'\0'};//大32位故用33位数组储存并初始化数组
itoa(n,string,8);
puts(string);
return 0;
}
int main() {return ChangeBase();
}
参考文章:
C语言中格式输出二进制的两种方法
itoa函数的使用与说明
C语言实现进制转换(详)
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧