题目描述
给你一个小数x,让你算出小数点后第n位是什么,1 <= n <= 6。
输入
首先输入一个t,表示有t组数据,跟着t行:
每行输入一个小数(输入数据保证一定是a.b的形式,总长度不超过100。为了简单化问题,没有循环小数的情况),然后跟一个n,表示小数点后第几位。
输出
输出一个整数,表示小数点后第n位的数。
样例输入 Copy
3
1.234 1
2.345 2
3.456 4
样例输出 Copy
2
4
0
代码
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,t,n,dot,flag;
char str[100];
scanf("%d",&t);
for(i=0;i<t;i++)
{
flag=0;
scanf("%s%d",str,&n); //输入字符串与n
//利用循环找到小数点的位置
for(j=0;str[j]!='\0';j++)
{
if(str[j]=='.')
{
dot=j;
break;
}
}
//利用循环找小数点后第n位
for(j=dot;str[j]!='\0';j++)
{
if(j==(dot+n)) //说明是小数点后第n位
{
printf("%c\n",str[j]);
flag=1;
break;
}
}
//考虑n比数的小数部分长的情况
if(flag==0)
printf("0\n");
}
return 0;
}
说明
使用scanf函数读取字符串遇到空格就认为读取结束,gets函数不接受回车字符,把他当作结束符,即遇到回车就读取之前的数据,那么后面的换行符就没有读取,这就导致后面使用的gets函数会读取到换行符,读取到换行符就不会读取后面的字符,因此使用gets函数一般要注意换行符问题,一般使用getchar()接收换行符
代码二
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,t,n,len,a;
char str[101];
scanf("%d",&t);
for(i=0;i<t;i++)
{
scanf("%s%d",str,&n); //读取字符串与n
len=strlen(str); //求字符串长度
a=0;
for(j=0;j<len;j++)
{
if(str[j]=='.') break;
else a++; //统计小数点前有几位数字
}
if(n>len-a-1) //说明n比字符串小数部分长度(len-a-1)长
printf("0\n");
else
printf("%c\n",str[a+n]); //(整数部分a+小数点1+小数点后n位)-1为其坐标
}
return 0;
}