个人学习编程(2-26)有关进制转换

反序数代码:

收录原因:

感觉求逆序数更方便,更简洁。

 

#include 

int main(){
    int n;
    scanf("%d",&n);
    int ans = 0; //将反序的数答案存在这里
    while (n>0)
    {
        ans *= 10;
        ans += (n%10);
        n /= 10;
    }
    printf("%d\n",ans);
    return 0;
    
}

主要是先对一个数,让0加上他的最后一位(这里通过求余来实现),再除以十获得倒数第二位,依次循环,直到这个数到第一位,此时最后一位已经*10有n次了为ans最前面的值加上最后一位,循环完毕。

 

10进制转为x进制:

收录原因:

预测签到题,或者x进制转为10  再有10进制转为y进制

#include 
int main() {
    int n,x;
    int s[105];
    //输入10进制n 和 要转换的进制x
    scanf("%d %d",&n,&x);
    int cnt = 0;
    while (n>0)//将n逐位分解
    {
        int w = (n % x);
        s[cnt++] = w;
        n /= x;
    }
    //反序输出
    for(int i = cnt - 1; i >= 0; i--){
        printf("%d",s[i]);
    }
    printf("\n");
    return 0;
    
}

 x进制转化为10进制:

#include 
#include   // 引入 math.h 库

int main() {
    int n, x;
    scanf("%d %d", &n, &x);  // 输入数字n和进制x
    
    int result = 0;  // 用来保存转换后的10进制结果
    int power = 1;   // 用来表示当前位的权值
    
    // 持续处理数字的每一位
    while (n > 0) {
        int digit = n % 10;  // 获取当前最低位的数字
        result += digit * power;  // 当前位的数字乘以相应的权值并累加
        power *= x;  // 权值乘以进制
        n /= 10;  // 去掉当前最低位
    }
    
    printf("%d\n", result);  // 输出最终的10进制结果
    
    return 0;
}

个人学习编程(2-26)有关进制转换_第1张图片

 

eg:十进制数转换为二进制数,支持输入最多 30 位的数字

要将十进制数转换为二进制数,并且支持输入最多 30 位的数字,可以按照以下步骤进行处理:

  1. 读取输入:由于输入数字可能非常大,可能超过普通整数类型的范围,因此建议使用 char 数组来存储输入的数字。
  2. 将十进制转换为二进制:可以通过不断除以 2 来获取二进制的每一位。每次取余(n % 2)得到当前二进制位,然后用 n /= 2 更新数字。
  3. 输出结果:二进制数是从低位到高位得到的,所以在输出时需要反转结果。
#include 
#include 

void decimalToBinary(char* decimal) {
    unsigned long long n = 0;
    // 将输入的十进制字符串转换为数字
    for (int i = 0; decimal[i] != '\0'; i++) {
        n = n * 10 + (decimal[i] - '0');
    }
    
    // 特殊情况:输入为0时直接输出0
    if (n == 0) {
        printf("0\n");
        return;
    }
    
    // 存储二进制结果
    char binary[100]; 
    int index = 0;
    
    // 将十进制数转换为二进制
    while (n > 0) {
        binary[index++] = (n % 2) + '0';  // 将当前余数转化为字符并存入数组
        n /= 2;  // 更新n
    }
    
    // 输出二进制结果(注意要反向输出)
    for (int i = index - 1; i >= 0; i--) {
        printf("%c", binary[i]);
    }
    printf("\n");
}

int main() {
    char decimal[32];  // 最多可以处理30位的十进制数字

    // 多组数据输入
    while (scanf("%s", decimal) != EOF) {
        decimalToBinary(decimal);
    }

    return 0;
}

 

 

你可能感兴趣的:(编程笔记,学习,算法,c++)