洛谷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 }
时间: 2024-12-27 21:47:50