public View BuildViewByModel(Model model) { View view = new View(); int degree = NumberWork.GetMostRoundingDegree(model.First, model.Second); long xArg = (long)(model.First * NumberWork.Pow(10, degree)); long yArg = (long)(model.Second * NumberWork.Pow(10, degree)); int maxLength = NumberWork.GetMaxLength(xArg, yArg); view.AddLine(makeIndent(Indent) + xArg); view.AddLine(makeIndent(Indent + maxLength - NumberWork.NumLength(yArg)) + yArg); view.AddLine(makeIndent(Indent) + makeLine(maxLength)); foreach (var component in model.Components) { view.AddLine(makeIndent(Indent + maxLength - NumberWork.NumLength(component)) + component); } view.AddLine(makeIndent(Indent) + makeLine(maxLength)); view.AddLine(makeIndent(Indent) + model.Result); return(view); }
private long[] computeComponents() { int degree = NumberWork.GetMostRoundingDegree(First, Second); long xArg = (long)(First * NumberWork.Pow(10, degree)); long yArg = (long)(Second * NumberWork.Pow(10, degree)); int maxLength = NumberWork.GetMaxLength(xArg, yArg); long[] components = new long[maxLength]; if (NumberWork.NumLength(xArg) < NumberWork.NumLength(yArg)) { Util.Swap(ref xArg, ref yArg); } long[] xComps = NumberWork.GetNumberComponents(xArg); long[] yComps = NumberWork.GetNumberComponents(yArg); for (int i = 0; i < maxLength; i++) { components[i] = xComps[i] + (i < yComps.Length ? yComps[i] : 0); } return(components); }