本文已参与「新人创作礼」活动,一起开启掘金创作之路。
C语言笔记之二进制: blog.csdn.net/weixin_4471…
十进制转其它进制
#include <iostream> //十进制与其它进制转换
#include <algorithm>
#include <string>
using namespace std;
string HEX = "0123456789abcdef"; //16进制字符
string DEC_k(long long DEC, int k) //10进制转变为K进制 (2<= k <=16)
{
string knum;
while (DEC)
{
knum += HEX[DEC % k];
DEC /= k;
}
reverse(knum.begin(), knum.end());
return knum;
}
其它进制转十进制
int to_int(char ch)
{
if(ch >= '0' && ch <= '9')
return ch - 48;
else
return ch - 87; //a的ASCII码为97
}
long long k_DEC(string knum, int k) //将k进制转为10进制 (2<= k <=16)
{
long long DEC = 0;
int len = knum.length();
for (int i = 0; i < len; i++)
DEC += to_int(knum[i]) * pow(k, len - i - 1);
return DEC;
}
int main()
{
long long num;
string knum;
int k;
cin >> num >> k; //输入10进制数与要转换的进制k
knum = DEC_k(num, k);
cout << k << "进制数为:" << endl;
cout << knum << endl;
cout << "从新转换为10进制数:" << endl;
cout << k_DEC(knum, k) << endl;
system("pause");
return 0;
}
运行结果
二进制
input:
1235 2
output:
2进制数为:
10011010011
从新转换为10进制数:
1235
请按任意键继续. . .
八进制
input:
231654 8
output:
8进制数为:
704346
从新转换为10进制数:
231654
请按任意键继续. . .
十六进制
input:
312624654 16
output:
16进制数为:
12a2460e
从新转换为10进制数:
312624654
请按任意键继续. . .
其它进制
十三进制
input:
13215231 13
output:
13进制数为:
2979183
从新转换为10进制数:
13215231
请按任意键继续. . .
七进制
input:
13215612 7
output:
7进制数为:
220221324
从新转换为10进制数:
13215612
请按任意键继续. . .
高精度加法
int A[100], B[100], C[102]; //C = A + B
string add(string a, string b)
{
string ans;
int len1 = a.length(), len2 = b.length();
int len = max(len1, len2), t = 0; //t表示进位
for (int i = 0; i < len1; i++)
A[i] = a[len1 - i - 1] - '0';
for (int i = 0; i < len2; i++)
B[i] = b[len2 - i - 1] - '0';
for (int i = 0; i < len; i++)
{
int k = A[i] + B[i] + t;
C[i] = k % 10;
t = k / 10;
}
for (int i = 0; i < len; i++)
{
char ch = C[i] + '0';
ans = ch + ans;
}
if(t > 0)
ans = '1' + ans;
return ans;
}
n进制加法
int H(char ch)
{
if (ch >= '0' && ch <= '9')
return ch - '0';
else if (ch >= 'a' && ch <= 'z')
return ch - 87;
}
string HEX = "0123456789abcdef";
int A[100], B[100], C[100];
string add(string a, string b, int n)
{
string ans;
int len1 = a.length(), len2 = b.length();
int len = max(len1, len2), t = 0;
for (int i = 0; i < len1; i++)
A[i] = H(a[len1 - 1 - i]);
for (int i = 0; i < len2; i++)
B[i] = H(b[len2 - 1 - i]);
for (int i = 0; i < len; i++)
{
int k = A[i] + B[i] + t;
C[i] = k % n;
t = k / n;
}
for (int i = 0; i < len; i++)
ans = HEX[C[i]] + ans;
if(t > 0)
ans = '1' + ans;
return ans;
}