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