进制转换【野路子改造】

非科班,一直都是自己的野路子,现在要回炉重造

十进制->二进制

基本思想:

开始写的(80%):

cpp 复制代码
#include<stdio.h>
using namespace std;
int main(){
int n;
scanf("%d",&n);
int a[10];
int i=0;
do
{
    a[i++]=n%2;
    n/=2;
}while(n!=0);
for (int j=i-1;j>=0;j--)
printf("%d",a[j]);

}

1024=2^10,需要a11

把a10改成a11(100%)

cpp 复制代码
#include<stdio.h>
using namespace std;
int main(){
int n;
scanf("%d",&n);
int a[11];
int i=0;
do
{
    a[i++]=n%2;
    n/=2;
}while(n!=0);
for (int j=i-1;j>=0;j--)
printf("%d",a[j]);

}

十进制->k进制:

注意:

可能会是字母!

cpp 复制代码
#include<stdio.h>
using namespace std;
int main(){
int n,k;
char a[11];
char b[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
scanf("%d %d",&n,&k);
int i=0;
do
{
    a[i++]=b[n%k];
    n/=k;
}while(n!=0);
for (int j=i-1;j>=0;j--)
printf("%c",a[j]);}

上面的做法太蠢了。输出端可用if (数字)else(字母);

再加上字符串是连着的,printf("%c",'A'+1)等于printf("%c",'B');

所以可以

cpp 复制代码
for (int i = len - 1; i >= 0; i--) {
        if (radixK[i] <= 9) {
            printf("%d", radixK[i]);
        } else {
            printf("%c", radixK[i] - 10 + 'A');
        }
    }

注意:char的输出用%c,不能用%s。

2进制转十进制

思路

k进制转10进制

Q1:如何接受输入?

Q2:如何知道输入长度?

A2:一个一个字符char的接受赋值给ci;i++

A1:看i

我写的(ac)

cpp 复制代码
#include<stdio.h>
#include<string>
using namespace std;
int main(){
    char c[8]; 
    char input1;
    int c2[8];
    int ci2=0;
    int i=0;
    int k;
    
do
{
	scanf("%c",&input1);
	if (input1>='0' && input1<='9')

	c2[i++]=input1-'0';

	else
{
	if (input1>='A' && input1<='F')

	c2[i++]=input1-'A'+10;
}
	
}while(input1!=' ');
scanf("%d",&k);
//printf("%d",k);
int ans=0;
for (int j=0;j<i;j++)
{
//printf("%d",c2[j]);
ans=ans*k+c2[j];
//printf("--%d--",ans);

}
printf("%d",ans);

}

我的代码有个bug,就是输入只能用空格隔开,一旦用回车,就会出错

当然下面这位也是 ,但下面这位可以修改

标准答案:

cpp 复制代码
#include <cstdio>
#include <cstring>

const int MAXN = 8;
char radixK[MAXN];

int main() {
    int k;
    scanf("%s %d", radixK, &k);
    int radix10 = 0, base = 1, lenRadixK = strlen(radixK);
    for (int i = lenRadixK - 1; i >= 0; i--) {
        int thisPosition = (radixK[i] >= '0' && radixK[i] <= '9') ? (radixK[i] - '0') : (radixK[i] - 'A' + 10);
        radix10 += thisPosition * base;
        base *= k;
    }
    printf("%d", radix10);
    return 0;
}

·A1:【include cstring】使用了cstring,与%d用空格隔开

A2:strlen获取字符串长度

相关推荐
LB21127 分钟前
力扣160 21 86
算法·leetcode·职场和发展
benchmark_cc38 分钟前
REST API 和 Python SDK 应该怎么选?量化交易数据接口选型实战
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
王的宝库42 分钟前
Go 项目结构:从单文件到标准工程布局
开发语言·后端·golang
Tairitsu_H1 小时前
[C++] 深入理解红黑树:封装set与map
开发语言·c++·set·map·红黑树·模拟实现
泡海椒1 小时前
JQuick-Curl 性能分析:并发场景下的性能表现与调优,第三方接口调用不只要快写也要稳跑
java·开发语言·okhttp
小智老师PMP1 小时前
2026深度解析|PMP第八版与NPDP核心侧重点本质区别(管理类证书怎么选)
开发语言·分布式·算法·职场和发展·产品经理
HugoStudio_SWAN1 小时前
洛谷 B4450 / B3867 / B3923 智慧购物、储蓄与做题——从程序到生活
c++·学习·程序人生·算法·生活
a187927218312 小时前
【算法】动态规划第二篇:双序列 DP 三课——继承、计步与断链
算法·leetcode·动态规划·dp·回溯·暴力·算法讲解
江畔柳前堤2 小时前
前台·中台·后台:2026年AI原生时代的架构全景图
开发语言·人工智能·算法·机器学习·架构·scala·ai-native
Figo_Cheung3 小时前
Figo基于RNC理论的宇宙演化第七纪元猜想
开发语言·php