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就知道了