数据结构之递归打印实数

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值