数据结构之递归打印实数

原创 2013年12月02日 21:09:42

问题:只使用处理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;
}
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

数据结构与算法分析笔记与总结(java实现)--二叉树1:递归二叉树的序列打印练习题

数据结构与算法分析笔记与总结(java实现)--二叉树1:递归二叉树的序列打印练习题

数据结构与算法分析笔记与总结(java实现)--二叉树2:非递归二叉树的序列打印练习题

数据结构与算法分析笔记与总结(java实现)--二叉树2:非递归二叉树的序列打印练习题

数据结构之栈与递归

数据结构(二叉树系列)先序创建三种遍历和求深度(递归实现)

typedef struct BiTNode{ // 二叉树结点结构 char data; // 结点数据 struct BiTNode *lchild; // 左孩子 struct BiTNode ...

nyoj128 前缀式求值(栈---递归---数据结构)

前缀式计算 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中...

数据结构课件递归

  • 2013-12-28 15:00
  • 244KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)