【万人千题】C语言解题报告11.22
1,1837. K 进制表示下的各位数字总和 - 力扣(LeetCode) (leetcode-cn.com)
int sumBase(int n, int k)
{
int ret[10000]={0};
int i=0;
int count=0;
int sum=0;
while(n)
{
ret[i]=n%k;
n=n/k;
i++;
count++;
}
for(i=0;i<=count;i++)
{
sum+=ret[i];
}
return sum;
}
2,1399. 统计最大组的数目 - 力扣(LeetCode) (leetcode-cn.com)
int cmp(const void*e1,const void*e2)
{
return *(int*)e2-*(int*)e1;
}
int countLargestGroup(int n)
{
// int* arr=(int*)malloc(sizeof(int)*n);
// int* tab=(int*)malloc(sizeof(int)*n);
int arr[10000]={0};
int tab[10000]={0};
int i=1;
int count=0;
for(i=1;i<=n;i++)
{
int m=i;
int sum=0;
while(m)
{
sum+=m%10;
m/=10;
}
arr[count++]=sum;
}
int countsum=0;
int counttab=0;
for(count=0;count<n;count++)
{
if(arr[count]==0)
continue;
countsum=1;
i=count+1;
for(;i<n;i++)
{
if(arr[count]==arr[i])
{
arr[i]=0;
countsum++;
}
}
tab[counttab++]=countsum;
}
qsort(tab,counttab,sizeof(int),cmp);
for(i=0;i<counttab;i++)
{
if(tab[i]!=tab[0])
break;
}
return i;
}
3,504. 七进制数 - 力扣(LeetCode) (leetcode-cn.com)
char ret[100] = { '0' };
void reverse1(char* ret,int i)
{
int left=1;
int right=i-1;
while(left<=right)
{
char tmp=ret[left];
ret[left]=ret[right];
ret[right]=tmp;
left++;
right--;
}
}
void reverse2(char* ret,int i)
{
int left=0;
int right=i-1;
while(left<=right)
{
char tmp=ret[left];
ret[left]=ret[right];
ret[right]=tmp;
left++;
right--;
}
}
char * convertToBase7(int num)
{
int i = 0;
int j=num;
if(num==0)
{
ret[0]='0';
ret[1]='\0';
return ret;
}
if (num<0)
{
ret[0] = '-';
i++;
}
num = abs(num);
while (num)
{
ret[i] = num % 7 + '0';
num /= 7;
i++;
}
if(j<0)
reverse1(ret,i);
else
reverse2(ret,i);
ret[i] = '\0';
return ret;
}
4,405. 数字转换为十六进制数 - 力扣(LeetCode) (leetcode-cn.com)
void judge(char* ret,int*sum)
{
int i=0;
int j=7;
for(i=0;i<8;i++)
{
if(sum[i]<10)
ret[j--]=sum[i]+'0';
else
{
switch(sum[i])
{
case 10:
ret[j--]='a';
break;
case 11:
ret[j--]='b';
break;
case 12:
ret[j--]='c';
break;
case 13:
ret[j--]='d';
break;
case 14:
ret[j--]='e';
break;
case 15:
ret[j--]='f';
break;
}
}
}
}
void Isok(char* ret)
{
int i=0;
while(ret[i]=='0')
i++;
int j=0;
for(;i<=8;i++)
{
ret[j]=ret[i];
j++;
}
}
char * toHex(int num)
{
char* ret=(char*)malloc(sizeof(char)*9);
if(num==0)
{
ret[0]='0';
ret[1]='\0';
return ret;
}
int arr[33]={0};
int i=0;
for(i=0;i<32;i++)
{
arr[i]=(num&1);
num=num>>1;
}
int sum[8]={0};
i=0;
int j=0;
for(i=0;i<=28;i+=4)
{
sum[j]=arr[i]+arr[i+1]*2+arr[i+2]*4+arr[i+3]*8;
j++;
}
judge(ret,sum);
ret[8]='\0';
Isok(ret);
return ret;
}
第四题就是先拿到每个数的32个比特位,然后计算每四个位的和,之后去判断对应6进制的那位数,然后对得到的字符数组进行处理,处理前导0的问题,直接找到第一个不为0的字符的下标,直接全部往前挪动就行。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了