1 条题解

  • 0
    @ 2025-5-8 20:03:20

    解决思路

    1. 遍历所有四位数:从1000100099999999逐一检查每个数字。
    2. 计算十进制数字之和:直接分解数字的各位并求和。
    3. 转换为十二进制和十六进制:分别计算这两种进制下的数字之和。
    4. 比较和值:若三种进制下的数字之和均相等,则输出该数字。

    解决代码

    #include<stdio.h>//十进制转化为十二进制和十六进制 
    #include<string.h>
    int TwelveSum(int n){
        int a[10],count=0,sum=0;
        while(n!=0){
            a[count++]=n%12;
            n/=12;
        }
        for(int i=0;i<count;i++){
            sum+=a[i];
        }
        return sum;
    } 
    int  SixteenSum(int n){
        char str[5];
        int sum=0;
        sprintf(str,"%x",n);
        for(int i=0;i<strlen(str);i++){
            if(str[i]>='a'&&str[i]<='z')
                sum+=str[i]-87;
            else
                sum+=str[i]-'0';
        }
        return sum;
    }
    int TenSum(int n){
        char s[10];
        int sum=0;
        sprintf(s,"%d",n);
        for(int i=0;i<strlen(s);i++)
            sum+=s[i]-'0';//0对应的ASCII值为48;
        return sum ;
    }
    int main(){
        int sum1,sum2,sum3,num;
        for(int j=2992;j<10000;j++){
            sum1=TwelveSum(j);
            sum2=SixteenSum(j);
            sum3=TenSum(j);
            if(sum1==sum2&&sum1==sum3&&sum2==sum3){
                printf("%d\n",j);
            }
        }
    }
    
    • 1

    信息

    ID
    3043
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    4
    已通过
    1
    上传者