确定n和交换n之和的所有数字是否都是奇数

时间:2010-03-26 23:04:13

标签: c#

我需要确定n个数字和交换n之和的所有数字是否都是奇数。

例如:

36 + 63 = 99(9和9都是奇数)

409 + 904 = 1313(1和3都是奇数)

Visual Studio构建我的代码并运行,但它不会返回答案。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            long num = Convert.ToInt64(Console.Read());
            long vol = voltea(num);
            long sum = num + vol;

            bool simp = simpares(sum);

            if (simp == true)
                Console.Write("Si");
            else
                Console.Write("No");

        }

        static private bool simpares(long x)
        {
            bool s = false;
            long [] arreglo  = new long [1000];
            while ( x > 0)
            {
                arreglo [x % 10] ++;
                x /=10;
            }

            for (long i=0 ; i <= arreglo.Length ; i++)
            {
                if (arreglo [i]%2 != 0)
                    s = true;
            }
            return s;
        }

        static private long voltea(long x)
        {
            long v = 0;

            while (v > 0) 
            {
                v = 10 * v + x % 10;
                x /= 10;
            }
            return v;
        }
    }
}

3 个答案:

答案 0 :(得分:6)

我不确定你的代码有什么问题,但我认为更简单的方法就是使用字符串,而不是用10来完成所有的除法和修改。

  1. 将原始数字转换为字符串,反转字符串,然后将其转换回长
  2. 添加原始数字和反转数字
  3. 将总和转换为字符串
  4. 循环结果字符串并检查每个数字是否为奇数

答案 1 :(得分:3)

“不回答”是不是很清楚你的意思。

添加:

        Console.ReadKey();
        Console.ReadLine();

在主要功能结束时。我猜测你没有看到答案,因为控制台正在关闭你。

编辑:

找到它:

for (long i=0 ; i <= arreglo.Length ; i++)

索引越界。那应该是:

for (long i=0 ; i < arreglo.Length ; i++)

我应该是“小于”arreglo,而不是“小于或等于”

EDIT2:

这就是您当前代码被破坏的原因。我强烈建议您也寻找解决问题的替代方法。见安迪怀特的答案。

答案 2 :(得分:0)

在我看来,你可能会有一个无限循环和一个永不进入的循环。

// because v = 0, the while will never execute
long v = 0;

while (v > 0) 
{
    v = 10 * v + x % 10;
    x /= 10;
}