P1017 [NOIP2000 提高组] 进制转换
一、求解步骤
原理: 被除数=除数*商+余数
而余数必须为大于等于的数字,为负数是没法表示的,所以当余数为负数时,需要进行特殊处理。
以为例:
cout << -15 % -2 ; -->输出-1
由此可以看出,在C++的运算出来,表示 余数是
但是,末位=-1 不行啊,余数不能是负的,需要再借一个过来,加一个,才能把余数转正.
借一个过来后,发生了两件事,
(1)原来的被借的数字需要再减去一个,而余数可以加上这个.变成
(2)但向上一位借了一个 ,被借数就小了一个,就是需要多减个!!!多减个!!多减个!
多了个,这里多了个就是 被除数=,除数=,余数=,那么 “商”=,也就是,原来的商由就成了,
就是商加了!
二、完整代码
#include <bits/stdc++.h>
using namespace std;
const int N = 110;
int n, r;
int a[N], idx;
/**
测试数据:
-15 -2
结果 110001
*/
int main() {
cin >> n >> r;
cout << n << "=";
//数位分离
while (n) {
a[idx] = n % r; //余数
n /= r; //商
if (a[idx] < 0) { //余数不能是负的,如果是负的,需要借位
a[idx] += (-r); //借位增加(-r)
n++; //商++
}
idx++;
}
//倒序
for (int i = idx - 1; i >= 0; i--)
if (a[i] >= 10)
printf("%c", (char) ('A' + a[i] - 10));
else printf("%d", a[i]);
cout << "(base" << r << ")";
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2019-08-22 使用Navicat生成ER关系图并导出
2015-08-22 理想智慧云