L1-046 整除光棍

#include<stdio.h>

int main() {
    int n, r = 1, w = 1;  // n: 输入的奇数;r: 模拟光棍数的余数;w: 光棍数的位数
    scanf("%d", &n);       // 读取输入的奇数n

    // 构造初始光棍数,使其大于等于n
    while (r < n) {        // 当r < n时,继续扩展r
        r *= 10;           // 将r左移一位(相当于在末尾添加一个0)
        r++;               // 在末尾添加一个1(例如:1 → 11,11 → 111)
        w++;               // 位数加1
    }

    // 模拟除法过程,逐位计算商并输出
    while (1) {            // 无限循环,直到余数为0
        printf("%d", r / n);  // 输出当前位的商(例如:111/31=3)
        r %= n;               // 计算余数(例如:111%31=18)
        if (r == 0) break;    // 若余数为0,跳出循环
        r = r * 10 + 1;      // 在余数末尾添加一个1(例如:18 → 181)
        w++;                 // 位数加1
    }

    printf(" %d", w);        // 输出光棍数的位数
    return 0;
}


除法的原理,自己算一下111/3=37就知道了

全部评论

相关推荐

哥_留个offer先:跟他说,你这个最好用c#,微软就用c#Java不适合这个项目
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务