一连串1组成的数被n整除问题
2013-11-19 22:02
204 查看
Time Limit: 5 Sec Memory
Limit: 64 MB
Description
给出一个整数n(0<n<10000),一连串1组成的数可能会被n整除,也可能永远都不会被n整除(比如2或5),现在让你解决的问题是给出你一个n,让你求出最小的一连串1被n整除后的结果例如:n=3时,111/3=37,则结果为37
Input
输入有多行(不超过1000行),每行一个整数n,以EOF结束Output
如果一连串1能被n整除,输出最小的一连串1被n整除后的结果否则,输出“Impossible”
Sample Input
23
7
Sample Output
Impossible37
15873
分析:
首先考虑几个特殊的数,当n=1,11,111,1111时,输出都为1。令m等于一连串1组成的数中能整除n的最小值,则当n=1时,m=1;1<n≤11时,m≥11;11<n≤111时,m≥111;111<n≤1111时,m≥1111;n>1111时,m≥11111。当n较大时,输出的结果可能会很大,所以开一足够大的数组sum存放结果,用n去除m可能的最小值,得到的商存于sum数组中,然后在余数的后面添1作为新的m(即m=m%n;m=m*10+1;),用n继续除m,直到能够整除或运算次数足够大时结束。若能够整除,sum数组存放的就是商,若运算次数足够大仍不能整除,则输出“Impossible”。
C++实现代码如下:
#include<iostream> using namespace std; int main() { long long m,n,i; while(cin>>n) { if(n==1) m=1; else if(n<=11) m=11; else if(n<=111) m=111; else if(n<=1111) m=1111; else if(n<=11111) m=11111; int sum[520000]; for(i=0; i<520000; i++) { sum[i]=m/n; if(m%n==0) { for(int j=0; j<=i; j++) cout<<sum[j]; cout<<endl; break; } m=m%n; m=m*10+1; } if(i==520000) cout<<"Impossible"<<endl; } return 0; }
相关文章推荐
- 整数问题 --如果一个数能够被组成它的各个非0数字整除,则称它是完美数。
- 1028: Dividing Up 多重背包解决一堆数中任取几个数能否组成m的问题
- 题目1104:整除问题(还是求素数)
- hdu 2099 整除的尾数(整除问题)
- IDEA是如何导入项目的,及启动导入项目遇到的问题:无法加载主类的一连串问题
- 交大1104,整除问题
- 由整数对(父节点和子节点的关系)组成的二叉树的高度问题
- Catalan数—求解n个节点能组成的二叉树个数问题
- 整除问题:给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除
- codevs 2925 整除问题
- 2011上交:整除问题
- hdu 4669 开二维数组记录结尾点和余数求整除问题
- 1-9 的数字,每个数字只能出现一次组成9位整数,其中第1位能被1整除 前 2 位能被 2 整除 前 3 位能被 3 整除 依次类推......... 前 9 位能被 9 整除
- 九度OJ 1104 整除问题 (求阶乘的质因数个数)
- MySQL三个列组成唯一值查询_开源中国问题练习_20161026
- 字典序问题。在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A由26个小写字母组成。该字母表产生的升序字符串中字母从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1
- 分治法实现众数问题--例如:S={1,2,2,2,3,5},则多重集S的众数是2,其重数为3。对于给定的由m个自然数组成的多重集S,计算出S的众数及其重数。
- 计蒜客 第2题:整除问题
- 数的整除问题
- 整除15问题