Mooc 数字特征值 c语言直接模拟

博客给出二进制转十进制的C语言算法解答。不像常见简洁答案,采用朴实方法,即直接模拟。先通过循环求位数,再对每位数字和数位直接比较,符合条件的进行二进制转十进制累加。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目说明在这里插入图片描述

思路解释

不像许多答案那样简洁,这里给出我的朴实解答。
就是直接模拟。先通过循环来求有几位数。
然后对每位数字和数位进行直接比较,符合的二进制转十进制累加即可。

#include<stdio.h>
#include<string.h>
#include<math.h>

int main(){
    int n;
    scanf("%d",&n); // 输入一个整数 n
    
    int sub=n; // 用于保存 n 的副本
    int digit_sum=0; // 用于记录 n 的位数总和
    
    // 计算 n 的位数总和
    while (sub){
        sub/=10;
        digit_sum++;
    }
    
    int binary_sum=0; // 用于保存最终的二进制和
    
    // 从最高位到最低位,计算二进制和
    while (digit_sum){
        int current_digit=n/ pow(10,digit_sum-1); // 获取当前位的数字
        
        // 判断当前位数字和位数是否同时为偶数或奇数
        if (current_digit%2==0 && digit_sum%2==0 || current_digit%2 && digit_sum%2)
            binary_sum+= pow(2,digit_sum-1); // 更新二进制和
        
        n-= pow(10,digit_sum-1)*current_digit; // 剔除当前位数字
        digit_sum--; // 减少位数
    }
    
    printf("%d",binary_sum); // 输出最终的二进制和
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天真且kk

觉得有帮助可以意思一下哈:)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值