C# 确定n和交换n之和的所有数字是否为奇数

C# 确定n和交换n之和的所有数字是否为奇数,c#,C#,我需要确定n个数字和交换的n的总和的所有数字是否都是奇数 例如: 36+63=99(9和9都是奇数) 409+904=1313(1和3都是奇数) VisualStudio生成我的代码并运行,但它不返回答案 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program {

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

例如:

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

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

VisualStudio生成我的代码并运行,但它不返回答案

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;
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
long num=Convert.ToInt64(Console.Read());
长体积=伏特(num);
长和=num+vol;
bool simp=simpares(总和);
如果(simp==true)
控制台。写入(“Si”);
其他的
控制台。写入(“否”);
}
静态私有布尔simpares(长x)
{
布尔s=假;
long[]arreglo=新长[1000];
而(x>0)
{
阿雷格洛[x%10]++;
x/=10;
}
用于(长i=0;长i=0)
{
v=10*v+x%10;
x/=10;
}
返回v;
}
}
}

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

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

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

我不确定你的代码出了什么问题,但我在想一个更简单的方法是使用字符串,而不是在10之前完成所有的除法和mod

  • 将原始数字转换为字符串,反转字符串,然后将其转换回长字符串
  • 添加原始编号和反向编号
  • 将总和转换为字符串
  • 在结果字符串上循环并检查每个数字是否为奇数

  • 你说的“不回答”是什么意思还不太清楚

    加:

    在主要功能的末尾。我猜你看不到答案,因为控制台正在靠近你

    编辑:

    找到它:

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

    for(long i=0;i)你尝试了什么?你做了哪些努力来隔离问题可能存在的地方?为什么不设置断点并逐步检查代码?@Juan-这是一个真正值得本论坛讨论的问题吗?在调试模式下运行它并找出问题发生的地方。这并不能解决你的问题,但请在
    if(simp){}
    而不是
    如果(simp==true){}
    (冗余)x是一个整数类型,所以它会被截断,最终会达到0。你怎么会这么想呢?@Ben Voigt-老实说,我不知道。再次阅读我的回复时,我感觉到一种非常wtf的感觉。我相信混乱是因为你最初的帖子看起来像是说问题在“simpares”中函数,当你指向“voltea”函数中的一个问题时,while条件中的v应该是x。
    for (long i=0 ; i <= arreglo.Length ; i++)
    
    for (long i=0 ; i < arreglo.Length ; i++)