L - 壮志难酬
枫冰叶子要求甘露回答一个问题,否则不让他离开,可惜甘露绞尽脑汁未果,希望你来帮他解决,助他完成大业。
问题是这样的:给你一个小数x,让你算出小数点后第n位是什么,(1 <= n <= 6)
Input
首先输入一个t,表示有t组数据,跟着t行:
每行输入一个小数(输入数据保证一定是a.b的形式,为了简单化问题,没有循环小数的情况)
然后跟一个n,表示小数点后第几位
Output
输出一个数表示小数点后第n位的数
Sample Input
3
1.234 1
2.345 2
3.456 3
Sample Output
2
4
6
欢迎交流:
每行输入一个小数(输入数据保证一定是a.b的形式,为了简单化问题,没有循环小数的情况)
然后跟一个n,表示小数点后第几位
3 1.234 1 2.345 2 3.456 3
2 4 6
#include<stdio.h>
#include<string.h>
int main()
{
int t;
scanf("%d", &t);
char s[100];
int n;
while (t--)
{
scanf("%s %d", &s, &n);
int i;
for (i = 0; s[i] != '.'; i++){}
if ((strlen(s) - i)>n)
printf("%c\n", s[i+n]);
else printf("0\n");//比如 1.234 6(6大于小数点后数字位数3)
}
return 0;
}
/*
下面为有误的代码:
获取小数点后的部分,将小数点移动到要得到的那位数的后面,然后取整,最后求数字的个位
float不能得到小数点后足够的位数
double出现这样的错误:3.456-(int)3.456=3.455……9
#include<stdio.h>
#include<math.h>
int main()
{
int t;
scanf("%d",&t);
double d = 0;
int n;
while (t--)
{
scanf("%lf%d",&d,&n);
int temp = (int)d;
double a = d - temp;
//用double出错 3.456-(int)3.456=3.459
int b = (int)(a*pow(10.0, n));
int c = (int)(b%10);
printf("%d\n",c);
}
return 0;
}
*/
#include<stdio.h>
#include<string.h>
int main()
{
int t;
scanf("%d", &t);
char s[100];
int n;
while (t--)
{
scanf("%s %d", &s, &n);
int i;
for (i = 0; s[i] != '.'; i++){}
if ((strlen(s) - i)>n)
printf("%c\n", s[i+n]);
else printf("0\n");//比如 1.234 6(6大于小数点后数字位数3)
}
return 0;
}
/*
下面为有误的代码:
获取小数点后的部分,将小数点移动到要得到的那位数的后面,然后取整,最后求数字的个位
float不能得到小数点后足够的位数
double出现这样的错误:3.456-(int)3.456=3.455……9
#include<stdio.h>
#include<math.h>
int main()
{
int t;
scanf("%d",&t);
double d = 0;
int n;
while (t--)
{
scanf("%lf%d",&d,&n);
int temp = (int)d;
double a = d - temp;
//用double出错 3.456-(int)3.456=3.459
int b = (int)(a*pow(10.0, n));
int c = (int)(b%10);
printf("%d\n",c);
}
return 0;
}
*/