您的位置:首页 > 编程语言 > C语言/C++

趣味取小数

2017-02-27 15:52 274 查看
听说大家最近学得不错,教授就准备考考大家,先做出来有奖哦~

 

编写一个函数,取一个小数的第n(-10<=n<=16)位,当n大于0时,从小数点位置开始向右取小数部分第n位,当n小于0时,从小数点位置开始向左取整数部分的第n位。

 

#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;

 }

 

主程序已给出,请编写get_one_digit函数并提交该函数即可

 

Input

 

一个小数,取小数的第n位

 

Output

 

小数的第n位

 

Sample Input

 

5.5772156649015328  10

 

Sample Output

 

9

 

这道题肯定是分n<0和n>0的情况来做的。

 

当输入的n大于零时,

 

我们只看小数部分,所以我们可以对变量进行类型转换,去掉整数部分

 

具体做法为:num=num-(long)num;

 

同样的这时我们在将num*10;num=num-(long)num;这时候我们便把小数点后第一位数字也去掉了

 

假设我们需要输出小数点后第n位的那一个数字,相当于去掉小数点后n-1位得到新的num,旧的num的第n位小数是新的num的第一位小数,这时我们再将num*10,输出num的整数部分就可以了

 

具体做法为:

 

x=num;

 

        while(n>0)

 

        {

 

            x=x-(long)x;                                  //取小数部分

 

            x=x*10;                                       

            n--;                                          //控制循环

 

        }

 

当n小于零时,

 

同样我们只需要看整数部分,num=(long)num取整。

 

如果我们想得到个位数(即n=-1)我们可以x=num%10;

 

如果得到想得到十位数字 我们可以num=num/10;x=num%10;

 

如果要得到第n位数字时我们可以num=num/10的n-1次方;x=num%10;

 

具体为:

 

long y;

 

        y=(long)num;

 

        n=-n;

 

        for(i=1;i<=n;i++)

 

        {

 

            x=y%10;

 

            y=y/10;

 

        }

 

所以整个代码为:

 

#include<stdio.h>

 

#include<string.h>

 

#include<math.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;

 

}

 

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;

 

    }

 

}

 .

 

顶0踩0

 

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言 OJ 编程