30个做设计的网站,网站开发平台有哪些,网页界面设计时颜色越多越好,网站建设案例分析题前言#xff1a;内容包括四大模块#xff1a;题目#xff0c;代码实现#xff0c;大致思路#xff0c;代码解读
题目#xff1a;
这里所谓的“光棍”#xff0c;并不是指单身汪啦~ 说的是全部由1组成的数字#xff0c;比如1、11、111、1111等。传说任何一个光棍都能被…前言内容包括四大模块题目代码实现大致思路代码解读
题目
这里所谓的“光棍”并不是指单身汪啦~ 说的是全部由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结尾的正奇数x1000。
输出格式
在一行中输出相应的最小的s和n其间以1个空格分隔。
输入样例
31输出样例
3584229390681 15
代码实现
#includestdio.h
int main()
{int x 0;scanf(%d,x);int n 1;int count 1;while(nx){nn*101;count;}while(1){printf(%d,n/x);nn%x;if(n0){break;}else{nn*101;count;}}printf( %d,count);return 0;
}
大致思路
预备了解
x输入的不以5结尾的正奇数
count光棍的位数
n:被除数
n/x:组成商的每一位
模拟除法图示 1. 首先需要得到一个比输入的奇数x大的数全部由1组成比如首先比31大的数是111
2. 得到第一位组成商的数字111/313
3. 若是当前被除数不能整除除数则需要找到下一个被除数直至能整除就停止寻找
不能整除则留下余数找下一个被除数被除数需要增加1个1比如111%3118下一个被除数是1111则我们需要增加一个1
相当于增加1的效果余数*101比如18*101181同时统计一次记录位数的变化
这样即可得到组成商的每一位余数*101/除数比如181/315
代码解读
part 1 int x 0;scanf(%d,x);int n 1;int count 1;
n让被除数 (光棍从1开始
count被除数是从1开始的则光棍的位数开始是1位
part 2找出首个比除数的被除数光棍 while(nx){nn*101;count;}
比如最开始是1131,则1-111131,则11-11111131,while循环结束此时光棍是111位数是3
part 3打印组成商的每一位数字 while(1){printf(%d,n/x);nn%x;if(n0){break;}else{nn*101;count;}}
比如经过上一个while循环后被除数n是111位数count是3 此时首先打印出第一位组成商的数字111/313 然后判断余数是否为0若为0则break结束循环说明已经找到了能够整除的光棍 若是余数不为0则需要增加1个1同时位数count1使得111变成1111 模拟增加1的效果余数*101即它作为新的被除数去除以除数x能够再次得到一位组成商的数字 比如111%31818*101180新的被除数180/315一位组成商的数字
最后就是打印光棍的位数了 printf( %d,count);