已知一个整数N,求另外一个整数M,使得M本身 + M各个位上的数 = N
2013-08-16 21:38
113 查看
这是一道简单的算法题,主要就是用了取整(/)和求余(%)这两个基本运算
C#代码如下所示:
C#代码如下所示:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace SumFormula { class Program { static void Main(string[] args) { try { Console.WriteLine("Please enter a value."); int value = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("The original value is: " + value + ""); //循环处理输入的数值 while (true) { EvaluationArithmetic(value); Console.WriteLine("Please enter a value.[If you want to exit, please enter 'e'.]"); value = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("The original value is: " + value + ""); if (value.ToString().Equals("e", StringComparison.CurrentCultureIgnoreCase)) { break; } } } catch (Exception ex) { } } ///<summary> /// 算法 ///</summary> ///<param name="value">传入用户输入的数值</param> private static void EvaluationArithmetic(int value) { try { //标示是否找到最终的数值(找到为true,没找到为false) bool flagFindFinalValue = false; int currentValue = value; string currentValueStr = value.ToString(); int count = currentValueStr.Length; while (currentValue > -1) { int finalValue = GetFinalVlue(value, currentValue, count); if (finalValue == value) { flagFindFinalValue = true; Console.WriteLine("The final value is: " + currentValue.ToString() + "\n\n"); break; } else { //如果没找到数值减1,继续循环 currentValue--; count = currentValue.ToString().Length; //如果此时的数值 + 位数 * 9 小于原始的Value,那么循环结束(即没有找到相应的数值),提高效率。 if (currentValue + count * 9 < value) { break; } } } if (flagFindFinalValue == false) { Console.WriteLine("Sorry, cann't find the final value.\n\n"); } } catch (Exception ex) { } } //将此时传入的数值进行分解,返回此数值与其各个位上的数字之和 private static int GetFinalVlue(int originalValue, int value, int digit) { try { int currentValue = value; int currentDigit = digit; int totalEachDigitValue = 0; for(int i = currentDigit; i > 0; i--) { int hightestDigitValue = currentValue / Convert.ToInt32(Math.Pow(10, i - 1)); int remainderValue = currentValue % Convert.ToInt32(Math.Pow(10, i - 1)); totalEachDigitValue += hightestDigitValue; currentValue = remainderValue; } return totalEachDigitValue + value ; } catch (Exception ex) { return -1; } } } }
相关文章推荐
- 已知一个整数N,求另外一个整数M,使得M本身 + M各个位上的数 = N
- 现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数
- 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。 如果输入的整数本身就是素数,则输出该素数本身,
- 现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数
- 将整数转换为相应的一个字符数组。 分析:从个位提取数字,组合字符 符号位的处理 12345=>"12345"
- C#第2次试验(1).创建一个抽象类A,该类中包含一个求两个数之和抽象方法。创建一个子类B,在B中重写求和方法,且使用方法重载使得方法可以分别计算整数、双精度、字符串。
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 计算一个 32 位无符号整数有多少个位为 1
- 将一个字符串中的各个位按递增排序的最大整数打印出来
- 给定一个整数sum,从有N个无序元素的数组中寻找元素a、b、c、d,使得 a+b+c+d =sum,最快的平均时间复杂度是____。
- 输入一个正整数n,输出一个最小正整数m,使得m的各位乘积等于n
- zoj 3512 Financial Fraud 给定一个整数序列a1, a2, … , an,求一个不下降序列b1 ≤ b2 ≤ … ≤ bn,使得数列{ai}和{bi}的各项之差的绝对值之和 |
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数---百度笔试题
- 4.给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。 要求:空间复杂度O(1),时间复杂度为O(n)
- 计算一个整数各个位的和,直到和<10输出
- 将1,2,3,4,5,6,7,8,9九个数字分成以下三种形式之一,每个数字只能用一次,使得该分数刚好为一个整数
- 问题描述如下: 有2.5亿个整数(这2.5亿个整数存储在一个数组里面,至于数组是放在外存还是内存,没有进一步具体说明); 要求找出这2.5亿个数字里面,不重复的数字的个数; 另外,可用的内存限定为600M; 要求算法尽量高效,最优;
- C#--第2周实验--任务13--创建一个抽象类A,创建一个子类B,在B中重写求和方法,且使用方法重载使得方法可以分别计算整数、双精度、字符串。
- 一个整数数组,有n个整数,如何找其中m个数的和等于另外n-m个数的和?