【洛谷 1017】进制转换
2016-11-08 17:42
197 查看
#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <cmath> #include <cstring> using namespace std; char nlist [20] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J'} ; //字库 int main() { int n , r , i , temp = 15 , num [20] ; bool flag = 0 ; memset(num,0,sizeof(num)); cin >> n >> r ; cout << n << '=' ; r = abs ( r ) ; if ( n == 0 ) { cout << "0(base-" << r << ")" ; return 0 ; } if ( n < 0 ) { flag = 1 ; n = abs ( n ) ; } //如果是负数每个系数都取负,此处标记 for ( i = 0 ; i <= 15 ; i++ ) if ( pow ( r , i ) > n ) temp = i - 1 ; //记录n在abs(r)进制下的最高位指数 for ( i = 0 ; i <= temp ; i++ ) { num [i] = n % r ; n = n / r ; } //模n取余转换进制 for ( i = 1 ; i <= temp ; i+=2 ) num [i] = - num [i] ; //由abs(r)转换为r进制 if ( flag ) for ( i = 0 ; i <= temp ; i++ ) num [i] = - num [i] ; for ( i = 0 ; i <= 19 ; i++ ) { if ( num [i] == r ) { num [i] = 0 ; num [i+1] -- ; } //看下一条语句你就明白为什么要进位了。为什么是--?自行考虑 if ( num [i] < 0 ) { num [i] += r ; num [i+1] ++ ; } //将所有负的系数转正:正如减法当中的借位。为什么是++?自行考虑 } for ( i = 19 ; i >= 0 ; i-- ) if ( num [i] != 0 ) { temp = i ; break ; } for ( i = temp ; i >= 0 ; i-- ) cout << nlist [ num [i] ] ; cout << "(base-" << r << ")" ; return 0 ; }
涉及到负进制的问题..
贴了份标程,不想写了。
相关文章推荐
- 洛谷1017 进制转换
- 洛谷1017 进制转换
- 洛谷1017 进制转换 解题报告
- [洛谷1017]进制转换
- [NOIP2000真题][洛谷1017]进制转换
- [洛谷1143]进制转换
- [LUOGU1017] 进制转换
- 洛谷 P1017 [NOIP2000 T1] 进制转换
- 洛谷P1017-进制转换
- 洛谷【P2084】进制转换
- 洛谷 P1017 进制转换
- 洛谷 P1017 进制转换
- 洛谷 P1017 进制转换
- 洛谷 P2084 进制转换
- 数学方法模拟(洛谷1017 进制转换NOIp2000提高组第一题)
- [NOIP2000] 提高组 洛谷P1017 进制转换
- 洛谷P1017 进制转换
- 洛谷 P1143 进制转换
- 洛谷P1017 进制转换
- 洛谷P2084 进制转换