趣味取小数

来源:互联网 发布:创维电视软件 编辑:程序博客网 时间:2024/05/21 11:16
听说大家最近学得不错,教授就准备考考大家,先做出来有奖哦~
 
编写一个函数,取一个小数的第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
 


  
0 0
原创粉丝点击