P1143

"> P1143

"> 洛谷P1143 – 嘉嘉的博客
洛谷P1143

如何在C++中进行进制转换?本文将在不使用现成函数的情况下完成这个(并不艰巨)的任务。

先抛洛谷链接:P1143

进入正题

做到N进制转X进制,肯定是把N进制数转到10进制再转到X进制,相当于是吧10进制当了一个桥梁的~

N进制转换10进制

按权展开:

只需要将N进制的每一个数字(字母)乘N的位权次方就可以了,位权是这个数后面有几个数~

10进制转X进制

我们只需用简单的短除法就可以完成这个(简单?)的任务:
短除法

这个图展示了用短除法求10的2进制的方法。

只需用C++做个简单的虚拟即可。需要注意的是短除法是倒着取,所以要把余数一个个pushstack里面,再一个个toppop出来!这个问题我查了半天!!!

代码

需要注意的是,C++cmath头里的pow(求的是次方)(似乎)不支持0次方,所以我们要自己判断一下。

1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include

#include
#include
using namespace std;
int toto(char i) {
if (i >= 'A') return i - 'A' + 10;

if (i >= '0') return i - '0';
}
char outout(int i) {
if (i > 9) return i - 10 + 'A';

return i + '0';
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
stack sk;
int to, as;
string st;
long long a = 0;
double from;
cin >> from >> st;
as = st.size();

for (int i = 0; i

cin >> to;

while (a) {
sk.push(outout(a {a638d642d867b568c1aede4e6cc48965ba83a47abef8f643eb9348429a71096e} to));
a /= to;
}

while (!sk.empty()) {
cout
sk.pop();
}

return 0;
}

写了两个简单的辅助函数totooutout来格式化输入/输出。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇