方法一:
根据a的最大值可以判断16进制数最大为8位
#include<iostream> using namespace std; int main() { char a[8]; long m; cin>>m; long s = m; int i = 0; while(s/16 != 0) { if(s%16 < 10) { a[i++] = ‘0‘+s%16; } if(s%16 >=10 && s%16 <16) { a[i++] = ‘A‘+s%16 - 10; } s = s/16; } if(s%16 < 10) { a[i] = ‘0‘+s%16; } if(s%16 >=10 && s%16 <16) { a[i] = ‘A‘+s%16 - 10; } while(i>=0) { cout<<a[i--]; } return 0; }
方法二:
#include<iostream> using namespace std; int main() { char a[8]; char b[] = "0123456789ABCDEF"; long m; cin>>m; long s = m; int i = 0; while(s/16 != 0) { a[i++] = b[s%16]; s = s/16; } a[i] = b[s%16]; while(i>=0) { cout<<a[i--]; } return 0; }
由此可以得到一个除k取余的一般方法,例如十进制转化为八进制可以这样写:
(假设a的最大值还是2147483647,最大需要11个8进制位)
#include<iostream> using namespace std; int main() { char a[11]; long m; cin>>m; long s = m; int i = 0; while(s/8 != 0) { a[i++] = ‘0‘ + s%8; s = s/8; } a[i] = ‘0‘ + s%8; while(i>=0) { cout<<a[i--]; } return 0; }
原文:http://blog.csdn.net/qsyzb/article/details/18887963