已知一个整数N,求另外一个整数M,使得M本身 + M各个位上的数 = N
2011-10-14 15:26
274 查看
这是一道简单的算法题,主要就是用了取整(/)和求余(%)这两个基本运算
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
- 【数据结构】输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
- 编写一个类的方法,其输入参数为一个整数,输出为该整数各个位上的最大数字
- 对于一个n位正整数a,去掉其中任意k(k<=n)个数字后,剩下的数字按原次序排列可以组成一个新的正整数。设计一个删数算法,使得剩下的数字组成的正整数最小。例如,a=13243221,k=5,输出:12
- 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,
- 一道题:给定一整数序列A1,A2,...,An(可能有负数),求A1到An的一个自序列,使得Ai到Aj的和最大。例如:整数序列-2,11,-4,13,-5,2,-5,-3,12,-9的最大子序列为21
- 如何求解一个整数的各个位上的数字
- 2.5输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b,使得该整数b的每一位等于原整数a中该位左右两边bit位的异或结果
- 有2.5亿个整数存放在一个文件中,(已知内存容量没有此文件大)如何判断出这个文件中有多少个不相同的数。
- 怎么依次取到一个整数的各个位?
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数。
- 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2<=n<
- 百度笔试:给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。 要求:空间复杂度O(1),时间复杂度为O(n)
- 设n个不同的整数排好序后存于T[1..n]中,若存在一个下标i(1≤ i ≤ n),使得T[i]=i。试设计一个有效算法找到这个下标,要求算法在最坏情形下的计算时间为O(log n)
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数
- 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天
- java应用程序中判断用户输入的一个整数是否在已知数组里。
- 现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数
- 算法习题54:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分