1. 程式人生 > >C++十進位制轉換任意進位制

C++十進位制轉換任意進位制

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