【题目描述】
计算 n/m 的值,设 n,m 为整数,n 的长度小于等于 1000,m 的长度小于等于 15 位,要求精确到小数点后 500 位。如果整数位为零,则省略小数点前的零
【输入】
两行,每行一个整数
【输出】
一行,保留 500 位小数的实数。
【样例输入】
355113
【样例输出】
3.141592920353982300884955752212389380530973451327433628318584070796460176991150442477876106194690265486725663716814159292035398230088
4955752212389380530973451327433628318584070796460176991150442477876
1061946902654867256637168141592920353982300884955752212389380530973
4513274336283185840707964601769911504424778761061946902654867256637
1681415929203539823008849557522123893805309734513274336283185840707
9646017699115044247787610619469026548672566371681415929203539823008
849557522123893805309734513274336
========================题解=====================
高精度除法。
观察数据,被除数<=1000位需要用数组存储,而除数<=15位,可以用long long存储,所以本题为高精除以低精。
首先,把被除数用char数组读入后再转为int数组,注意这里要正序存储。之后用一个变量来存每步运算的中间值,之后用每一位去除以除数,注意这里的每一步除法的被除数都是本位的值加上上一步除法所得的余数的10倍,这里的余数就是那个中间值。在答案数组中存储本次除法所得的商,再把中间变量的值更新为本次运算的余数。
本题可以将整数部分与小数部分分开处理。
处理完整数部分后,去除答案数组中的前导零再输出,之后单独输出小数点。
小数部分的处理方法与整数部分的类似,只是每次运算的被除数就是上次运算的余数的10倍。本题要求精确到小数点后500位,所以循环终止条件为500即可。
最后再输出小数部分。