我被赋予了使用堆栈来使用C ++将数字从基数10转换为基数2的任务。我得到了数字18,27,71,107和178.我不知道从哪里开始,我只是想知道是否有人愿意通过编写示例代码并向我解释来帮助我。我的老师并不是最好的。
答案 0 :(得分:1)
#include <cstdio>
#include <stack>
int main(void) {
unsigned int n;
while(scanf("%u", &n) == 1) { // read a number to convert
std::stack<int> s; // create stack. it is initialized.
do {
s.push(n & 1); // push the "lowest" digit to the stack
} while ((n >>= 1) > 0); // proceed to next digit until the number becomes 0
// s.top() is the highest digit here
while (!s.empty()) { // print the number
printf("%d", s.top()); // print the "highest" number here
s.pop(); // proceed to next digit
}
putchar('\n');
}
return 0;
}
答案 1 :(得分:1)
具有基数的数字可以相对容易地转换为具有另一个基数的数字。在你的情况下,只有正数。所以我暂时坚持这一点。
让我们取第一个数字18.考虑一个循环。您使用modulo转换为您想要的基数。一般可以应用于任何基地。一个非常简单的大纲如下:
do {
int x = abs( n % b );
push x on stack;
} while ( n /= b );
示例:
For n=18 it be as follows:
Stack [0] , n = 18
Stack [0,1] , n = 9
Stack [0,1,0] , n = 4
Stack [0,1,0,0] , n = 2
Stack [0,1,0,0,1], n = 1
Stack [0,1,0,0,1], n = 0 <- terminates here
你从堆栈中读取,就像在舞池上一样弹出:
while (stack not empty) {
cout << stack.pop();
}
会给:
10010
二进制中的数字18,即基数为2。
我没有编写C ++代码。我相信你能够自己设计和编写代码。其他人已经提供了代码。
答案 2 :(得分:0)
#include <iostream>
#include <stack>
using namespace std;
int main()
{
int n;
stack<int> Stack;
int tmp;
cout << "Put n:";
cin>> n;
cout << endl;
// Push to stack
while(n!=0)
{
Stack.push(n%2);
n = n/2;
}
// Get back and print out
while(Stack.size()!=0)
{
// get top element in the stack
tmp = Stack.top();
// pop it out from stack
Stack.pop();
cout << tmp ;
}
cout << endl;
system("pause");
return 0;
}