posts - 195,  comments - 30,  trackbacks - 0
Given any integer 0 <= n <= 10000 not divisible by 2 or 5, some multiple of n is a number which in decimal notation is a sequence of 1's. How many digits are in the smallest such a multiple of n?

Sample input

3
7
9901

Output for sample input

3
6
12


可以不用高精度除法,直接如下,很巧妙,不通用。

#include <stdio.h>
int main()
{
int n, a, b;
while (EOF != scanf("%d", &n))
{
a = 1;
b = 1;
while (a)
{
a = (a * 10 + 1) % n;
++b;
}
printf("%d\n", b);
}
}

高精度除法
----
#include<iostream>
#include<cstdlib>
using namespace std;
int a[9]={1,11,111,1111,11111,111111,1111111,11111111,111111111};
const int MOD=11111;
  bool test(int i,int j)
  {
  if(j<10)
  {
   if(a[j-1]%i==0)
   return true;
   return false;
  }
  else
  {
   int temp=0;
   int k=j%5;
   int p=j/5;
   if(k==0)
   {
    for(int m=1;m<=p;m++)
       {
     temp*=100000;
        temp+=MOD;
        temp%=i;
       
       }
       if(temp==0)
       return true;
       else
       return false;
     }
     else
     {
    int m,f=1;
    for(m=1;m<=p;m++)
       {
        temp*=100000;//由于5位5位除,应当乘上10^5;
     temp+=MOD;
        temp%=i;
       
       }
       for(m=0;m<k;m++)//最后应当乘以其后的位数乘10^n,
       f*=10;
     if((temp*f+a[k-1])%i==0)
     return true;
     else
     return false;
     }
   
  }
  }
  int main()
  {
  //freopen("s.txt","r",stdin);
  //freopen("key.txt","w",stdout);
  int i;
  while(cin>>i)
  {
  if(i==1)
  {
   cout<<'1'<<endl;
   continue;
  }
  for(int j=2;;j++)
  {
   if(test(i,j))
   {
    cout<<j<<endl;
    break;
   }
      }
  }

  //system("PAUSE");
  return   0;
  }

posted on 2009-07-18 17:38 luis 阅读(1229) 评论(0)  编辑 收藏 引用 所属分类: 给我启发题

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

留言簿(3)

随笔分类

随笔档案

文章分类

文章档案

友情链接

搜索

  •  

最新评论

阅读排行榜

评论排行榜