进制转换
R进制转换为十进制:二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……
0110 0100 换算成十进制:0 * 20 + 0 * 21 + 1 * 22 + 0 * 23 + 0 * 24 + 1 * 25 + 1* 26 + 0 * 27 = 100
八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方……
1507换算成十进制:7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839
代码:
int change(char s[],int d) { int len=strlen(s); int sum=0; int x=1; for(int i=len-1;i>=0;i--) { int ss; if(isalpha(s[i])) { ss=(s[i]-'a'+10); } else { ss=(s[i]-'0'); } sum+=ss*x; x=x*d; } return sum; }
十进制转换为R进制:对于整数部分,用被除数反复除以2,除第一次外,每次除以2均取前一次商的整数部分作被除数并依次记下每次的余数。另外,所得到的商的最后一位余数是所求二进制数的最高位。
#include<iostream> using namespace std; int main() { long long n; int r, i, m, j; int a[1000]; while (cin >> n >> r) { i = 0; if (n < 0) { n = -n; cout << "-"; } if (n == 0) { cout << 0; } while (n>0) { m = n%r; a[i++] = m; n = n / r; } i = i - 1; for (j = i; j >= 0; j--) { switch (a[j]) { case 10:cout << "A"; break; case 11:cout << "B"; break; case 12:cout << "C"; break; case 13:cout << "D"; break; case 14:cout << "E"; break; case 15:cout << "F"; break; default:cout << a[j]; } } cout << endl; } return 0; }

浙公网安备 33010602011771号