C、C++输出精度控制—hdu acmstep 1.2.4 financial management&&1.2.8 balloon comes

本文介绍了C++中如何精确控制浮点数的输出精度,并提供了使用不同数据类型和输入输出方法的示例。此外,还展示了如何避免常见错误,如多余的输出和输入终止问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目如下

题目

思路很简单,用循环算出12个月份之和再/12即可。关键就是输出精度的控制。

代码如下:

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
    float sum,number,i;
    for(i=1;i<=12;i++)
    {
        cin>>number;
        sum+=number;
    }
    cout<<"$"<<setiosflags(ios::fixed)<<setprecision(2)<<sum/12<<endl;
    return 0;
}

      setiosflags()和setprecision()均在iomanip头文件下。

      若不加前面的fixed 则结果将会保留两位有效数字并以科学计数法表示。fixed的效果是将小数分为整数部分、小数点和小数部分三部分,这样写可以控制小数部分的精度。

      循环也可使用while(cin>>number),但在自己编译运行输入时,输入12个数字之后要按ctrl+z代表输入结束,否则cin会一直等待读入。在线上判题时是文件读入,用while也不会出错。

      一般来说,为了确保精度,在平时做题时用double而不用float,对内存占用不会浪费太多,也不会太大地影响运行速度。c语言读入double类型的数据:scanf("%lf",& ) 而输出为:printf("%f", )

      对于控制精度而言,用c语言中的printf() 会比较容易。头文件为cstdio或stdio.h。例如此题中的控制两位精度,则可以表示为printf("%.2f",sum/12); 其中的.数字即是用来控制精度的。



1.2.8

1.2.8

第一遍做题写的代码如下:

#include <cstdio>
using namespace std;
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        char C;
        int A,B;
        long long int result;
        scanf("%c%d%d",&C,&A,&B);
        if(C=='+')
            result=A+B;
        else if(C=='-')
            result=A-B;
        else if(C=='*')
            result=A*B;
        else if(C=='/')
        {
            float row=(float)A/B;
            printf("%.2f\n",row);
        }
        printf("%lld\n",result);    
    }
    return 0;
}

      然后就会发现,在减的时候多了输出。因为无论是哪个运算符,都会执行printf result的语句,就算没有对result进行初始化也一样会有输出,因此要将printf放到if里面。

注意:要在%c前面加空格,用于跳过对空格和回车的读取,只有在char类型时,是默认连带着空格和回车一起读取的,所以一定要在%c前面加空格!!

#include <cstdio>
using namespace std;
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        char C;
        long long int result,A,B;
        scanf(" %c%lld%lld",&C,&A,&B);
        if(C=='+')
            printf("%lld\n",A+B);
        else if(C=='-')
            printf("%lld\n",A-B);
        else if(C=='*')
            printf("%lld\n",A*B);
        else if(C=='/')
        {
            if(A%B==0)
                printf("%lld\n",A/B);
            else
            {
                float row=(float)A/B;
                printf("%.2f\n",row);
            }
        }   
    }
    return 0;
}

然后就把代码改成了这样。
1.当是除法时,判断结果是不是整数,完全可以用可不可以整除来判断,而不是直接判断是整型还是浮点。
2.当改成printf("%lld\n",A-B);的时候,如果前面A,B是整型,类型是不会自动变成long的。
3.别忘换行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值