Description
这里所谓的“光棍”,是指全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。
请编写程序读入一个整数x
,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s
,表示x
乘以s
是一个光棍,第二个数字n
是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。
提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除x
为止。
但难点在于,s
可能是个非常大的数。 比如,程序输入31,那么就输出3584229390681和15,因为31乘以3584229390681的结果是111111111111111,一共15个1。
Input
一个不以5结尾的正奇数x
(<1000)。
Output
输出相应的最小的s
和n
,其间以1个空格分隔。
Sample Input 1
31
Sample Output 1
3584229390681 15
#include <stdio.h>
#include<math.h>
#include<string.h>
//模拟除法的类型题
int main()
{
int n, a[1000],b[1000],count=0,t=0;
scanf("%d", &n);
for (int i = 0; i < 1000; i++)
a[i] = 1;//初始化a,111111....
for (int i = 0; i <= 1000; i++)
{
a[i] = t * 10 + a[i];//加上上一位
b[count++] = a[i] / n;//记录商数
t = a[i] % n;//记录余数
if (a[i]%n==0)//整除后break
break;
}
int flag = 0;
for (int i = 0; i < count; i++)
{
if (b[i])flag = 1;//去除前几位的0
if(flag)printf("%d", b[i]);
}
printf(" %d", count );
return 0;
}
该题数据过大,使用long long int也存不住这么大的数,只能模拟除法来做