【万人千题】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的字符的下标,直接全部往前挪动就行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值