前言
原文章出自:《算法零基础100讲》(第19讲) 进制转换(一) - 入门
X进制 转 十进制
公式:
示例: 对于八进制数 0123
十进制 转 X进制数
注:图片来自:《算法零基础100讲》(第19讲) 进制转换(一) - 入门
剑指 Offer 15. 二进制中1的个数
原题链接:剑指 Offer 15. 二进制中1的个数
代码
与运算性质,分解出各个1,时间复杂度 O(log 2n)
int hammingWeight(uint32_t n)
{
int count = 0;
while (n)
{
count++;
n &= (n - 1);
}
return count;
}
258. 各位相加
原题链接: 258. 各位相加
代码
int GetNum(int n)
{
int ans = 0;
while (n)
{
ans += (n % 10);
n /= 10;
}
return ans;
}
int addDigits(int num)
{
while (num > 9)
{
num = GetNum(num);
}
return num;
}
1290. 二进制链表转整数
原题链接:1290. 二进制链表转整数
代码
int getDecimalValue(struct ListNode* head)
{
if (NULL == head) return 0;
int ans = 0;
struct ListNode* p = head;
while (p != NULL)
{
ans = ans * 2 + p->val;
p = p->next;
}
return ans;
}
1837. K 进制表示下的各位数字总和
原题链接: 1837. K 进制表示下的各位数字总和
代码
int sumBase(int n, int k)
{
int ans = 0;
while (n)
{
ans += (n % k);
n /= k;
}
return ans;
}
504. 七进制数
原题链接: 504. 七进制数
代码
char* convertToBase7(int num)
{
if (num == 0)
return "0";
char* ans = (char*)calloc(12,sizeof(char));
if (num < 0)
strcat(ans, "-");
num = abs(num);
char ar[12] = {0};
int i = -1;
while (num > 0)
{
ar[++i] = (char)(num % 7 + '0');
num /= 7;
}
for (i; i >= 0; --i)
{
strncat(ans, ar + i, 1);
}
return ans;
}
405. 数字转换为十六进制数
原题链接:405. 数字转换为十六进制数
代码
char * toHex(int num)
{
char* hash = {"0123456789abcdef"};
char* ans = (char*)malloc(sizeof(char) * 9);
ans[8] = 0;
int size = 8;
do
{
ans[--size] = hash[num & 0xf];
num = (unsigned)num >> 4;
}while (num);
return ans + size;
}
课后习题
1399. 统计最大组的数目
|