进制转化
十进制转化为其他进制
除基取余法:
如果要转化为D进制,则将待转化数除以D,然后将余数低位存储(一般用数组进行存储),而商则继续除以D,重复上面的操作,直至商为0时,停止操作。最后将数组逆序输出就能得到D进制数
如果将9转化为二进制数
9%2 商为4,余数为1
4%2 商为2,余数为0
2%2 商为1,余数为0
1%2商为0,余数为1
所以9的二进制数为1001
基于这个循环特性,我们可以用do{}while()循环,先取余一次,判断商是否为0
例题:
PAT B1002 D进制的A+B
输入两个非负十进制数A和B,以及D(进制数)输出A+B的D进制数
输入:
123 456 8
输出:
1103
#include<cstdio>
using namespace std;
const int maxn =101;
int a[maxn];
int main(void){
int m,n,d;
while(scanf("%d %d %d",&m,&n,&d)!=EOF){
int sum = m+n;
int index = 0;
//进制转化。除基取余法
do{
a[index++] = sum%d;
sum/=d;
}while(sum!=0);
//逆序打印输出,因为是低位优先存储
for(int i = index-1;i>=0;i--){
printf("%d",a[i]);
}
printf("\n");
}
}
对第十届蓝桥杯年号字串的思考
本题实际上是一个将十进制转化为二进制的问题,通过上面的引例可以解决这道题
#include<bits/stdc++.h>
using namespace std;
int main(void){
//一定要下标对应字母,1对应A,2对应B,以此类推
char str[27]{0,'A','B','C','D','E','F','G','H','I','J','K'
,'L','M','N','O','P','Q','R','S','T','U','V',
'W','X','Y','Z'};
int n;
while(scanf("%d",&n)!=EOF){
string s ="";
do{
s+=str[n%26];
n/=26;
}while(n!=0);
for(int i =s.size()-1;i>=0;i--){
cout<<s[i];
}
printf("\n");
}
}