给定一个正整数N,请判断1/N是否为无限小数,若是输出YES,若不是请输出NO。
思路:
只要被除数n可以转换成2的次幂或者2与5的组合即为有限小数,否则为无线小数
代码如下:
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>
#include <math.h>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <sstream>
const int INF=0x3f3f3f3f;
typedef long long LL;
const int mod=1e9+;
//const double PI=acos(-1);
#define Bug cout<<"---------------------"<<endl
const int maxn=5e5+;
using namespace std; int judge(int n)
{
while(n)
{
if(n%==||n==)
{
n/=;
}
else
break;
}
while(n)
{
if(n%==||n==)
{
n/=;
}
else
break;
}
if(n==)
return ;
else
return ;
} int main()
{
int n;
scanf("%d",&n);
if(judge(n))
printf("NO\n");
else
printf("YES\n");
return ;
}
递归写法:
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>
#include <math.h>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <sstream>
const int INF=0x3f3f3f3f;
typedef long long LL;
const int mod=1e9+;
//const double PI=acos(-1);
#define Bug cout<<"---------------------"<<endl
const int maxn=5e5+;
using namespace std; int Solve(int n)
{
if(n==)
return ;
else if(n%==)
return Solve(n/);
else if(n%==)
return Solve(n/);
else
return ;
} int main()
{
int n;
scanf("%d",&n);
if(Solve(n))
printf("NO\n");
else
printf("YES\n");
return ;
}