面对1/n这样的运算,有时候会出现无限循环
即给定一个数n,输出1/n的结果,若是循环小数,则只输出第一个循环节。例如:输入 n 3
输出 0.3
直接上代码讲解:
#include <algorithm>
#include <iostream>
using namespace std;
int a[100005];//此数组我们从下标1开始
int n;
void get(int n)
{
int length = 1;//先取下标1记录
a[1] = 1;
while(length){
length = length * 10;//关键,扩大相除,结果输出,余数继续,就是模拟除法
printf("%d",length/n);
length = length % n;
if(a[length])//如果余数没有出现过则为0,出现过则跳出循环,一个循环节里
//是不可能出现相同数字的
{
break;
}
a[length] = 1;//将余数标记
}
}
int main()
{
while(cin>>n){
memset(a, 0, sizeof(a));
if(n < 0 )//如果 n 是负数,结果有负号,方便计算 n 转化成正数
{
printf("-");
n = n * -1;
}
if(n==1)//n 为 1 的时候没有循环节,结果直接输出
{
printf("1\n");
continue;
}
if(n > 0 )//若为正数,结果必然小于1,先输出结果前缀
{
printf("0.");
}
get(n);//进行循环节计算
printf("\n");
}
return 0;
}
第一次写博客记录,有什么问题请大家指出,共同进步!!!