zoukankan      html  css  js  c++  java
  • 【9102】&&【a102】求a/b的高精度值

    Time Limit: 10 second
    Memory Limit: 2 MB

    问题描述
    计算a/b的精度值,设a,b以一般整数输入,计算结果精确到小数后20位(结果四舍五入)。

    Input

    文件输入仅一行,输入a和b,之间用空格隔开。

    Output

    输出a/b的高精度值,最后用回车结束

    Sample Input

    4 3
    

    Sample Output

    4/3=1.33333333333333333333
    
    

    Sample Input2

    6 5
    

    Sample Output2

    6/5=1.2
    


    【题解】

    这个做除法的过程实际上就是模拟笔算除法。

    在处理小数的时候只要乘10,然后取模,再乘10取模就可以了。进行21次。

    第21位若是大于等于5则往前进位。

    ***********给的测试点中,有出现答案是整数的要写成X.0的形式,即要在整数后加上.0

    【代码】

    #include <cstdio>
    
    int a,b,ans[25];
    
    void input_data()
    {
    	scanf("%d%d",&a,&b);
    }
    
    void get_ans()
    {
    	int x= a % b;
    	int tt = 0;
    	ans[0] = a / b; //整数部分直接 
    	for (int i =1; i <= 21;i++) //进行21次的*10和取模的过程 
    		{
    			tt++;
    			ans[tt] = x*10 / b;
    			x = (x*10) % b;
    		}
    	if (ans[21] >= 5) //如果第21位大于等于5,则一直往前进位。 
    		{
    			ans[20] ++;
    			for (int i = 20;i>=1;i--)
    				if (ans[i] >= 10)
    					ans[i]-=10,ans[i-1]++;
    		}
    }
    
    void output_ans()
    {
    	printf("%d/%d=",a,b); //整数和小数点可以直接输出。 
    	printf("%d.",ans[0]);
    	int t = 20;
    	//接下来要去除末尾多余的0 
    	while (ans[t] == 0 && t >1) t--;
    	for (int i = 1; i <= t;i++)
    		printf("%d",ans[i]);
    }	
    
    int main()
    {
    	input_data();
    	get_ans();
    	output_ans();
    	return 0;	
    }



  • 相关阅读:
    教你透彻了解红黑树(转)
    算法描述伪代码
    B 树、B+ 树、B* 树
    Java四种引用类型
    Java程序以后台方式在Linux上运行(nohup命令)
    java 文档注释
    Reactor模式和NIO
    Immutable模式与string类的实现
    mina 入门
    索引和优化查询
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7632404.html
Copyright © 2011-2022 走看看