C++十進位制轉換任意進位制
阿新 • • 發佈:2018-11-29
1.題目描述:
2.演算法分析:
如上是將十進位制轉換1-16進位制,並且有可能會輸入負數
首先我們先考慮當輸入的要轉換的數為0,那麼不管是任何進位制,轉換都是0.
然後考慮進位制是否小於10,因為大於等於10之後的進位制需要使用字元’A’-‘F’.
考慮進位制小於10之後我們又需要考慮需要轉換得數是否是負數。
先考慮正數,用短除法,但是需要注意所取得餘數應該逆序輸出,所以應該存入字元陣列或者字串操作。
當轉換的數為0時跳出迴圈。
對字元陣列逆序輸出。
然後考慮負數只需要將負數取絕對值求出後在第一位新增-號即可。
當進位制>10時,我們考慮多出的字元’A’-'F’即可。
3.原始碼:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
char s[10005];
int main(){
int x,n;
scanf("%d%d",&x ,&n);
int count = 0; //記錄存了多少陣列
if(x == 0){ //當
printf("0\n");
}
if(n < 10){
int r;
if(x < 0){
int x1 = abs(x);
while(x1 != 0){
r = x1 % n;
s[count] = r + '0';
count++;
x1 /= n;
}
printf("-");
for(int i = count - 1 ; i >=0 ; i--){
printf("%c",s[i]);
}
}else{
while(x != 0){
r = x % n;
s[count] = r + '0';
count++;
x /= n;
}
for(int i = count - 1 ; i >=0 ; i--){
printf("%c",s[i]);
}
}
}else{
int r;
if(x < 0){
int x1 = abs(x);
while(x != 0){
r = x % n;
if(r == 10){
s[count] = 'A';
}else if(r == 11){
s[count] = 'B';
}else if(r == 12){
s[count] = 'C';
}else if(r == 13){
s[count] = 'D';
}else if(r == 14){
s[count] = 'E';
}else if(r == 15){
s[count] = 'F';
}else{
s[count] = r + '0';
}
count++;
x /= n;
}
printf("-");
for(int i = count - 1 ; i >=0 ; i--){
printf("%c",s[i]);
}
}else{
while(x != 0){
r = x % n;
if(r == 10){
s[count] = 'A';
}else if(r == 11){
s[count] = 'B';
}else if(r == 12){
s[count] = 'C';
}else if(r == 13){
s[count] = 'D';
}else if(r == 14){
s[count] = 'E';
}else if(r == 15){
s[count] = 'F';
}else{
s[count] = r + '0';
}
count++;
x /= n;
}
for(int i = count - 1 ; i >=0 ; i--){
printf("%c",s[i]);
}
}
}
return 0;
}
歡迎關注Blog:http://47.107.118.184