c 语言基础:L1-046 整除光棍

        这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s,表示x乘以s是一个光棍,第二个数字n是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。

提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除x为止。但难点在于,s可能是个非常大的数 —— 比如,程序输入31,那么就输出3584229390681和15,因为31乘以3584229390681的结果是111111111111111,一共15个1。

输入格式:

输入在一行中给出一个不以5结尾的正奇数x(<1000)。

输出格式:

在一行中输出相应的最小的sn,其间以1个空格分隔。

输入样例:

31

输出样例:

3584229390681 15

程序源码:

#include  // 引入标准输入输出库,它包含了printf和scanf等基本输入输出函数  
  
int main()  // 主函数入口  
{  
    int x = 0;  // 定义一个整型变量x并初始化为0,这个将是用户输入的数字  
    scanf("%d", &x);  // 从用户处接收一个整数输入并赋值给x,这里使用%d来读取整数  
  
    int n = 1;  // 定义一个整型变量n并初始化为1,这个将是用来计算x的位数的临时变量  
    int count = 1;  // 定义一个整型变量count并初始化为1,这个将用来计数x的位数  
  
    // 这个while循环的目的是计算x的位数。n每次乘以10然后加1,这样n的位数就增加了1  
    while (n < x)  
    {  
        n = n * 10 + 1;  // n乘以10然后加1  
        count++;  // count增加1  
    }  
  
    // 这个无限while循环的目的是逐位输出x的每一位数字。开始时,n是x的每一位数,然后通过除法和模运算更新n和count  
    while (1)  
    {  
        printf("%d", n / x);  // 输出n除以x的结果,即x的每一位数  
        n = n % x;  // 通过模运算更新n,即取出下一位数  
        if (n == 0)  // 如果n为0,说明已经输出完所有位数,退出循环  
        {  
            break;  
        }  
        else  
        {  
            n = n * 10 + 1;  // 如果n不为0,那么增加n的位数,为输出下一位做准备  
            count++;  // 同时count也增加1  
        }  
    }  
  
    // 输出count,即x的位数  
    printf(" %d", count);  
    return 0;  // 主函数返回0,表示程序正常退出  
}

 

你可能感兴趣的:(c,c语言)