数据结构与算法--递归数字打印问题

Write a function to output an arbitrary double number (which might be negative) using only printDigit for I/O. For example, the output number will be 10.55 for input number 10.548.The compiled source code is required.
编写一个函数,仅将printDigit用于I / O,以输出任意双数(可能为负数)。例如,输入数字10.548的输出数字将为10.55。需要编译的源代码。

程序思路:考虑到小数进位问题,将双精度浮点数拆分成整数和小数两个部分,为保留两位小数,可将小数部分100+0.5并取整,同时判断是否进位。进位情况分两种,整数部分进位和小数部分进位,若整数部分有进位,整数部分+1,小数部分变为00;若第一位小数部分有进位,正常输出保留两位小数;若第二位小数部分有进位,则整数部分不变,小数部分变为0.0的形式,最后调用递归函数将整数和小数两部分打印出来。

#include<iostream>

using namespace std;

void PrintDigit(int n)//递归打印数字

{

 if(n>=10)

 {

 PrintDigit(n/10);

     cout<<(n%10);

 }

 else

 cout<<(n%10);

}

int main()

{

 double a;//输入数字a

 int c;//小数*100+0.5取整,确定是否进位

 cout<<"Please input a number:";

 cin>>a;

    if(a<0)//判断该数是否为负数

    {

     a=-a;

     putchar('-');

 }

 c=int((a-int(a))*100+0.50);

 if(c/10==0)       //若输入部分小数部分为0.0**,整数输出0,第一位小数输出0,第二位正常输出

 {

        PrintDigit(int(a));

     cout<<'.';

     PrintDigit(0);

        PrintDigit(c);

 cout<<endl;

 }

 else if(c/100==1)//若整数部分有进位,整数部分+1,小数部分变为00

 { 

 PrintDigit(int(a)+1);

     cout<<'.';

     PrintDigit(0);

        PrintDigit(0);

 cout<<endl;

 }

 else //若无进位,则正常输出保留两位小数

 {

 PrintDigit(int(a));

     cout<<'.';

     PrintDigit(c);

 cout<<endl;

 }  

}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值