标题:新手求助,数字拆分并且运算的写法
只看楼主
wuyabaobao
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-9-14
结帖率:100%
已结贴  问题点数:20 回复次数:9 
新手求助,数字拆分并且运算的写法
我刚学C#,遇到个标签码的运算问题,求各位高手帮忙解答,具体内容如下:
随意输入一串数字:sum=4789(不固定的)
然后先进行第一步运算:a=4*4+7*7+8*8+9*9
                       =16+49+64+81
                       =210
也就是先拆分成单个数字,然后乘以自己,相加得到一个数210
接着判断位数,如果不是1位的话就进行下一步运算:
210=2+1+0=3
最后输出b=3

也就是输入4789,输出结果是3.
请高手指教,谢谢
搜索更多相关主题的帖子: 运算 拆分 数字 
2009-09-14 20:32
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
得分:0 
简单的算法

拿4789来说。

4789/1000 = 4
(4789 - 4 * 1000)/100 = 7
(4789 - 4 * 1000 - 700)/10 = 8
4789 - 4 * 1000 - 700 - 8 * 10 = 9

这个规律应该就可以看出来吧..你的问题解决了...
2009-09-15 00:31
wuyabaobao
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-9-14
得分:0 
回复 2楼 zhoufeng1988
这样不是很好吧
如果不是4位数呢?30或者更多位数的话,估计代码量要崩掉了。
2009-09-15 09:00
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
得分:10 
程序代码:
        /// <summary> 
        /// 入口,传入要处理的数字(下面的方法中,如果不能满足数字的大小,就换成float或者是double) 
        /// </summary> 
        /// <param name="NO"></param> 
        /// <returns></returns> 
        private int PNum(int NO) 
        { 
            if (NO.ToString().Length == 1)      //一位数字 
            { 
                return NO; 
            } 
            else 
            { 
                int ResNo = MulNo(NO); 
                if (ResNo.ToString().Length == 1) 
                { 
                    return ResNo; 
                } 
                else 
                { 
                    return AddNo(ResNo); 
                } 
            } 
        } 
 
        /// <summary> 
        /// 每位相乘 
        /// </summary> 
        /// <param name="NO"></param> 
        /// <returns></returns> 
        private int MulNo(int NO) 
        { 
            int Res = 0; 
 
            char[] noList = NO.ToString().ToCharArray(); 
            foreach (char c in noList) 
            { 
                Res += int.Parse(c.ToString()) * int.Parse(c.ToString()); 
            } 
 
            return Res; 
        } 
 
        /// <summary> 
        /// 每位相加 
        /// </summary> 
        /// <param name="NO"></param> 
        /// <returns></returns> 
        private int AddNo(int NO) 
        { 
            int Res = 0; 
 
            char[] noList = NO.ToString().ToCharArray(); 
            foreach (char c in noList) 
            { 
                Res += int.Parse(c.ToString()); 
            } 
 
            return Res; 
        }
收到的鲜花
  • wuyabaobao2009-09-15 12:18 送鲜花  3朵   附言:好文章

飘过~~
2009-09-15 10:32
wuyabaobao
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-9-14
得分:0 
回复 4楼 bygg
谢谢斑竹帮忙解答
貌似没看到对求和的结果的位数进行判断的操作啊
如果结果只是2位那还好办,如果位数多的话是不是用一个变量
然后判断是否<=10,才结束,这样会比较好吧。
2009-09-15 12:33
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
得分:0 
因为我看你在描述时,只写了两次处理,一次是每位数想乘,一次是每位数相加.
如果你还要处理的话,自己再加一下就行了...方法也简单..

飘过~~
2009-09-15 13:06
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
得分:0 
我说的是一个算法,有了算法了,你难道实现起来会有问题?
难道我举得一个4位的例子,你就要写一个计算四位的程序?
这个东西是我最开始学C的一个简单的例子,去看看谭浩强的《C语言程序设计》吧!

2009-09-15 13:35
tonid
Rank: 1
等 级:新手上路
帖 子:121
专家分:7
注 册:2008-7-13
得分:0 
楼上的别急嘛,人家说的是事实,如果30位还能用你那个所谓的“算法”吗?
再说,那能叫算法吗,学过计算机的人都知道……
2009-09-15 18:12
ChinaPoison
Rank: 2
等 级:论坛游民
帖 子:6
专家分:22
注 册:2009-9-15
得分:10 
这种最低级的都不会做..还这么多人来争论..
回家种地去吧!
程序代码:
using System; 
using System.Collections.Generic; 
 
namespace GeiSB 
{ 
    class Program 
    { 
        static void Main(string[] args) 
        { 
            Console.WriteLine("Please enter the number:"); 
            string numberStr = Console.ReadLine(); 
            List<int> _getNumbers = new List<int>(); 
 
            _getNumbers = GetEveryBit(numberStr); 
 
            long firstSetupResult = 0; 
            foreach (int i in _getNumbers) 
            { 
                firstSetupResult += i * i; 
            } 
 
            Console.WriteLine(firstSetupResult.ToString()); 
 
            List<int> _getNumbers_2 = new List<int>(); 
            _getNumbers_2 = GetEveryBit(firstSetupResult.ToString()); 
            int endResult = 0; 
 
            foreach (int i in _getNumbers_2) 
            { 
                endResult += i; 
            } 
            Console.WriteLine(endResult.ToString()); 
            Console.ReadKey(); 
        } 
 
        public static List<int> GetEveryBit(string NumberStr) 
        { 
            char[] numberArray = NumberStr.ToCharArray(); 
            List<int> numbers = new List<int>(); 
 
            foreach (char num in numberArray) 
            { 
                numbers.Add(Convert.ToInt32(num.ToString())); 
            } 
 
            return numbers; 
        } 
    } 
} 
2009-09-15 22:16
ChinaPoison
Rank: 2
等 级:论坛游民
帖 子:6
专家分:22
注 册:2009-9-15
得分:0 
哦,对了,还要个什么不是一位,那就判断一下泛型集合的Count属性是不是1不就完了?..
2009-09-15 22:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-285738-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.518674 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved