我需要确定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;
}
}
}
答案 0 :(得分:6)
我不确定你的代码有什么问题,但我认为更简单的方法就是使用字符串,而不是用10来完成所有的除法和修改。
答案 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;
}