C++十进制转换任意进制

版权声明:[email protected] https://blog.csdn.net/lytwy123/article/details/84578866

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

猜你喜欢

转载自blog.csdn.net/lytwy123/article/details/84578866