这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由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
(<)。
输出格式:
在一行中输出相应的最小的s
和n
,其间以1个空格分隔。
输入样例:
31
输出样例:
3584229390681 15
这里的x显然是一个卡点,如若直接操作,会有两个测试点超时;
具体做法就是不断增加1的位数除以输入的那个x,直到能整除为止。
这里要注意除法的基本基础,被除数除以除数=被除数/除数,然后拿余数去除,因为这里的“光棍”全都是1,比较好处理;
输出的数字必须一个一个输出,亦或者存到数组里边输出
代码:
1 #include<iostream>
2 #include<cmath>
3 using namespace std;
4 int main()
5 {
6 int i=0,x;
7 cin>>x;
8 int n=0;
9 while(n<x)
10 {
11 n=n*10+1;
12 i++;
13 }//找>n的光棍的最小位数,防止商为0的情况,
14 //cout<<i<<endl;
15 while(1)
16 {
17 if(n%x==0)
18 {
19 cout<<n/x;
20 break;}//循环出口
21 else
22 {
23 cout<<n/x;//一位一位输出
24 n%=x;
25 n=n*10+1;//继续除
26 i++;
27 }
28 }
29 cout<<" "<<i;
30 }
还是大的看起来舒服
#include<iostream> #include<cmath> using namespace std; int main() { int i=0,x; cin>>x; int n=0; while(n<x) { n=n*10+1; i++; }//找>n的光棍的最小位数,防止商为0的情况, //cout<<i<<endl; while(1) { if(n%x==0) { cout<<n/x; break;}//循环出口 else { cout<<n/x;//一位一位输出 n%=x; n=n*10+1;//继续除 i++; } } cout<<" "<<i;
}