洛谷1017 进制转换

洛谷1017 进制转换

本题地址:http://www.luogu.org/problem/show?pid=1017

 

思路:

  其实和普通的进制转换一样,只是要转换成负进制时,余数可能为负数。因此只要多加一个判断余数是否为负数,当余数为负数时,余数自减除数,商自增即可。

 1 #include <cstdio>
 2 #include <stack>
 3 using namespace std;
 4 void work(int n, int m)
 5 {
 6     int t;
 7     stack<int> s;
 8     printf("%d=", n);
 9     while(n)
10     {
11         t = n % m;
12         n /= m;
13         if(t<0)
14             t -= m, ++n;
15         s.push(t);
16     }
17     for(; !s.empty(); s.pop())
18     {
19         t = s.top();
20         if(t <= 9)
21             printf("%d", t);
22         else
23             printf("%c", 'A' + t - 10);
24     }
25     printf("(base%d)\n", m);
26 }
27 int main(void)
28 {
29     int n, m;
30     while(~scanf("%d %d", &n, &m))
31         work(n, m);
32 }

 

posted @ 2015-09-04 18:50  Corvey  阅读(171)  评论(0编辑  收藏  举报