目錄
演算法學習
《演算法零基礎100講》(第19講) 進制轉換(一) - 入門_英雄哪里出來-CSDN博客https://blog.csdn.net/WhereIsHeroFrom/article/details/120875977
習題解題報告
例題1
例題2
例題3
例題4
例題5
例題6
例題7
演算法學習
《演算法零基礎100講》(第19講) 進制轉換(一) - 入門_英雄哪里出來-CSDN博客
https://blog.csdn.net/WhereIsHeroFrom/article/details/120875977
習題解題報告
例題1
二進制中1的個數
https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/
- 題目描述:

- 解題思路:
比較基礎,取余和除法的使用
- 參考代碼:
nt hammingWeight(uint32_t n) {
int i,cnt=0;
while(n)
{
if(n%2==1)
cnt++;
n/=2;
}
return cnt;
}
例題2
各位相加
https://leetcode-cn.com/problems/add-digits/
- 題目描述:

- 解題思路:
對于一般來說使用回圈便可以解決
如果是進階來說,便需要一點數學思想:
這里我們讓一個三位數表示成xyz,那么就有x*100+y*10+z=x*99+y*9+x+y+z
要得到x+y+z則整體%9
這個題得到的結果一定為0-9,如果%9的話結果為0-8,那么先拆出一個1再加上1:
(x*99+y*9+x+y+z+1-1)%9=(x+y+z-1)%9+1%9=(x+y+z-1)%9+1
- 參考代碼:
int addDigits(int num){
return (num-1)%9+1;
}
例題3
1290. 二進制鏈表轉整數 - 力扣(LeetCode) (leetcode-cn.com)
https://leetcode-cn.com/problems/convert-binary-number-in-a-linked-list-to-integer/
- 題目描述:

- 解題思路:
鏈表的遍歷+進制的思想
- 參考代碼:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
int getDecimalValue(struct ListNode* head){
int ret=0;
struct ListNode*cur=head;
while(cur)
{
ret=ret*2+cur->val;
cur=cur->next;
}
return ret;
}
例題4
1837. K 進制表示下的各位數字總和 - 力扣(LeetCode) (leetcode-cn.com)
https://leetcode-cn.com/problems/sum-of-digits-in-base-k/
- 題目描述:

- 解題思路:
進制轉換+各數求和(取余和除法)
- 參考代碼:
int sumBase(int n, int k){
int ret=0;
while(n)
{
ret=ret*10+n%k;
n/=k;
}//得到的數是反過來的,不過并不礙事
int ans=0;
while(ret)//簡單求各位數和
{
ans+=ret%10;
ret/=10;
}
return ans;
}
例題5
1399. 統計最大組的數目 - 力扣(LeetCode) (leetcode-cn.com)
https://leetcode-cn.com/problems/count-largest-group/
- 題目描述:

- 解題思路:
對于各數和的數用標記陣列記錄,同時記錄最大個數,再遍歷計數
- 參考代碼:
int countLargestGroup(int n){
int book[50]={0};//標記各數和陣列(各數和有范圍)
int max=0;//記錄最大個個數
int i;
for(i=1;i<=n;i++)
{
int sum=0;
int tmp=i;
while(tmp)//各數和
{
sum+=tmp%10;
tmp/=10;
}
book[sum]++;//標記和的個數
if(book[sum]>max)//標記最大
max=book[sum];
}
int cnt=0;//遍歷計數
for(i=1;i<50;i++)
{
if(book[i]==max)
cnt++;
}
return cnt;
}
例題6
504. 七進制數 - 力扣(LeetCode) (leetcode-cn.com)
https://leetcode-cn.com/problems/base-7/
- 題目描述:

- 解題思路:
演算法學習中已經講解過了
- 參考代碼:
char * convertToBase7(int num){
char*ret=(char*)malloc(sizeof(char)*20);
int stack[20]={0},top=0;//陣列堆疊
int retsize=0;
if(num<0)//正負號
{
ret[retsize++]='-';
num=-num;
}
if(num==0)//特殊情況
{
return "0";
}
else
{
while(num)//反向儲存進制數
{
stack[top++]=num%7;
num/=7;
}
}
while(top--)
{
ret[retsize++]=stack[top]+'0';//反向轉化
}
ret[retsize]='\0';//結束符
return ret;
}
例題7
405. 數字轉換為十六進制數 - 力扣(LeetCode) (leetcode-cn.com)
https://leetcode-cn.com/problems/convert-a-number-to-hexadecimal/
- 題目描述:

- 解題思路:
再上題基礎上再變化一下就可以了
- 參考代碼:
char * toHex(int num){
char*ret=(char*)malloc(sizeof(char)*20);
int stack[20]={0},top=0;//陣列堆疊
int retsize=0;
unsigned int n=num;//補碼運算
if(n==0)//特殊情況
{
return "0";
}
else
{
while(n)//反向儲存進制數
{
stack[top++]=n%16;
n/=16;
}
}
while(top--)
{
if(stack[top]>=10)
{
ret[retsize++]=stack[top]-10+'a';
}
else
{
ret[retsize++]=stack[top]+'0';//反向轉化
}
}
ret[retsize]='\0';//結束符
return ret;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/353393.html
標籤:其他
上一篇:程式的環境和預處理
下一篇:劍指offer-之-哈希表
