题目:描述
判断某个数是不是整数(整数指没有小数部分或者小数部分全为0的数)
输入描述
第一行一个浮点数 n(1≤n≤1000) 表示一共有n个数需要判断,数据的小数部分可能很长。 接下来 n 行,每行一个数 a(0≤a≤1500)。
输出描述
n 行,每行一个字符串。如果是非浮点数,输出"YES",反之输出"NO"(输出不包含引号)
用例输入 1
5
1.0
3.3
0.114514
1.919810
4
用例输出 1
YES
NO
NO
NO
YES
一.思路是什么?
仔细看题,小数部分可能很长,说明什么??说明不能直接用浮点数来计算,就是不能直接去通过加减乘除来判断是否为浮点数。此时我们就需要转换思路,因为需要判断是否为非浮点数,那就是判断小数点后面的数,好,此时我们说到了一个重要的点,那就是**“小数点”**,如果我们就查这个 “点”,查到这个之后,就判断后面的数和0的关系,不就可以了吗???那我们就需要一个字符数组来存放这个。
二、使用步骤
1.引入库
代码如下(示例):
#include <stdio.h>
#include <string.h>
char a[15000];
int main()
{
int n;
scanf("%d",&n);
while(n--)//循环次数,注意不能一直用for循环,为了代码的美观
{
int flag=0,k=0;//设置二个标志位,以便在程序中能够进行判断
scanf("%s",a);//输入数组
for(int i=0;i<strlen(a);i++)//小于输入数组的长度
{
if(flag==0)//先利用第一个设置的标志位,肯定要让数据
//先进入这个条件语句
{
if(a[i]=='.')//判断是否读到了‘.’,若读到了‘.’
//则之后的判断就是在判断小数点后面的数字是否为0了
{
flag=1;//所以此时把标志位flag的值变为1.
//以便其下次a[i+1]这个元素再进入此条件语句,
//而是进入else的下一个条件语句
}
}
else if(a[i]!='0'){//这是在判断小数点后面的数字是否为0的操作
k=1;//当然,此时在发现与条件相符的时候。就会改变第二个
//标志位k的值,然后一边下面进行输出判断
}
}
if(k==1)//此时就开始输出判断,判断的条件就是k的值
{
printf("NO\n");
} else {
printf("YES\n");
}
}
}
## 2.读入数据
总结
总的来说,就是要学会用标志位,然后懂得怎么去用字符数组。