题目描述
听说大家最近学得不错,教授就准备考考大家,先做出来有奖哦~
编写一个函数,取一个小数的第 nnn (−10≤n≤16)(-10 \le n \le 16)(−10≤n≤16) 位:
- 当 n>0n \gt 0n>0 时,从小数点位置开始向右取小数部分第 nnn 位;
- 当 n<0n \lt 0n<0 时,从小数点位置开始向左取整数部分的第 nnn 位。
#include <stdio.h>
#include <string.h>
int get_one_digit(double num,int n); /* 函数声明 */
int main()
{
double number;
int n;
int digit; /* 第 n 位数字 */
scanf("%lf%d", &number, &n); /* 输入数据 */
digit = get_one_digit(number, n); /* 调用查找第 n 位数字并将数字返回复制给 digit */
printf("%d\n", digit);
return 0;
}
输入
一行两个数,第一个数是一个小数,第二个数是 nnn。
输出
小数的第 nnn 位。
输入输出样例
样例输入 #1
复制
5.5772156649015328 10
样例输出 #1
复制
9
提示
主程序已给出,请编写 get_one_digit
函数并提交该函数即可。
int get_one_digit(double num,int n)
{
double x;
if(n>0)
{
x=num;
while(n>0)
{
x=x-(long)x; //取小数部分
x=x*10;
n--; //控制循环
}
return (int)x; //取整
}
else
{
int i,x;
long y;
y=(long)num;
n=-n;
for(i=1;i<=n;i++)
{
x=y%10;
y=y/10;
}
return x;
}
}