思路:先给被除数扩大10^10000倍,然后从后向前截取10000位 即为结果的小数部分。
不过,程序中不能储存这么大的数,所以只能将数字字符串化,采用模拟手算的方法计算.
using System; using System.Collections.Generic; using System.Text;
namespace Calc2 { class Calc { /// <summary> /// KINGLO /// </summary> /// <param name="num1"></param> /// <param name="num2"></param> public void Calcer(int num1, int num2) { //取被除数位数 int num1Len = num1.ToString().Length; //取除数位数 int num2Len = num2.ToString().Length; //结果 String res = ""; //两数相除的整数部分 int portNum = num1 / num2; /// ///以下过程模拟手动除法过程 /// //生成临时除数字符串 String tempStr = ""; //控制输入小数点变量 int x = 0; for (int i = 0; i < num1Len+10000; i++) { int n = 0; if (num1Len > i) { tempStr += num1.ToString().ToCharArray()[i]; } else { tempStr += "0"; } int tempNum = int.Parse(tempStr); int tempPort = tempNum / num2; if (tempPort != 0) { tempStr = (int.Parse(tempStr) - tempPort * num2) + "";
x++;//记录商大于次数,当x=1时则是第一次商大于,此时输出小数点 } if (x == 1) { res+= '.'; } //保存每次计算结果 res += tempPort.ToString(); } ///输出结果 Console.Write("结果:"+res); Console.ReadLine(); } } }