关闭

数据结构之递归打印实数

标签: C++递归
535人阅读 评论(0) 收藏 举报
分类:

问题:只使用处理I/O的printDigit函数,编写一个函数来输出任意double型变量(可以是负数)

解决:要输出double型变量,首先要输出任意整数(可以是负数),然后才能输出实数(可以是负数)

代码:

输出任意整数(可以是负数)的c++代码如下:

#include<iostream>
#include<math.h>//math.h库
using namespace std;
void printDigit(int n);
void main(){
int n;
cin>>n;
printDigit(n);

}
void printDigit(int n){

if(abs(n)>=10){
printDigit(n/10);
cout<<abs(n)%10;
}
else cout<<n%10;

}


下面考虑输出任意实数,整数和实数主要是小数点的区别,小数点前一部分和后一部分均为整数

思路:

1.  获得实数的整数部分:intPart = n    intPart 为int 型,n为double 型

2.  打印出整数部分:printDigit(intPart)。

3.  如果有小数部分,跟着打印小数点:printf(“.”);然后获得小数部分:dicPart = n – intPart    dicPart 为double型。

4.  如果有小数部分,将小数部分转换为整数,然后用printDigit()函数打出。

  for(i = 0; i < pointNum;i++)

              {

                   dicPart *= 10;

              }

          //小数部分都为正整数,整个实数的符号位已经由整数部分处理好了

              Int dicInt = abs(dicPart);

         //打印

         printDigit(dicInt);

代码:

#include<iostream>
#include<math.h>
using namespace std;
void printDigit(int n);
void printReal(double n,int pointNum);
void main(){
double n;
int pointNum;
cin>>n>>pointNum;
printReal(n,pointNum);
}
void printDigit(int n){
if(abs(n)>=10){
printDigit(n/10);
cout<<abs(n%10);
}
else cout<<n%10;

}
void printReal(double n,int pointNum){
int intPart;
double dicPart;
intPart=(int)n;
dicPart=(double)(n-intPart);
printDigit(intPart);
if(pointNum>0){
for(int i=0;i<pointNum;i++){
dicPart*=10;
}
cout<<".";
printDigit(abs(dicPart));
cout<<dicPart;
}
}



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4868次
    • 积分:96
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档