这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由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)。
输出格式:
在一行中输出相应的最小的s
和n
,其间以1个空格分隔。
输入样例:
31
输出样例:
3584229390681 15
分析:
利用竖除法来 进行大数除法 个人感觉 最关键在于找到 最小的 被除数 比如这道题就是 如果输入为 31 那么 最小被除数就是111
不管是1111 除31 还是 11111 除31 以及 111111111111111 除31 运算的时候都是先计算 111除31 这个用手算一下 然后观察一下就可以看出来了
这里我简单写了下 有点丑 还是上面的例子 可以发现 运算的时候 都是先于111 进行除法然后得到18 然后补1 然后再除再补1一直到余数为0
代码和 其他大佬的一样:
#include<iostream>
using namespace std;
int main()
{
//除数
int c;
cin >>c;
int bc=0;
int cunt=0;
while(bc<c)
{
bc=bc*10+1;
cunt++;
}
while(true)
{
//每次除法 都可以得到商的其中一位
cout<<bc/c;
//bc 就是 被除数 准确来说是被除数的余数
bc=bc%c;
if(!bc)
{
break;
}else
{
bc=bc*10+1;
cunt++;
}
}
cout <<" "<<cunt;
return 0;
}