我尝试编写检查奇数和偶数之间比率的程序 给定数字中的数字。我在使用这段代码时遇到了一些问题:
static void Main(string[] args)
{
int countEven = 0 ;
int countOdd = 0 ;
Console.WriteLine("insert a number");
int num = int.Parse(Console.ReadLine());
int length = num.GetLength;
for (int i = 0;i<length ; i++)
{
if((num/10)%2) == 0)
int countEven++;
}
}
任何想法?
答案 0 :(得分:3)
问题是procq:
image: hub_ui:latest
environment:
ENV: qa1
RUNPROCQ: "false" # this is to stop the proc q from running straight away - the refresh_db.sh script will set this to true once it has finished loading the fixtures
links:
- db:local.database.hub
- cache:local.cache.hub
command: /var/www/hub/process-queue-runner.sh
没有长度,只有它的字符串表示有一个。作为m.rogalski答案的替代,您可以将输入视为字符串以获取所有数字一个人。一旦你有了一个数字,然后将其解析为int
并检查它是偶数还是奇数。这将是这样的:
int
答案 1 :(得分:2)
Linq
方法
Console.WriteLine("insert a number");
string num = Console.ReadLine(); // check for valid number here?
int countEven = num.Select(x => x - '0').Count(x => x % 2 == 0);
int countOdd = num.Select(x => x - '0').Count(x => x % 2 != 0);
答案 2 :(得分:1)
我们假设您的输入是:123456
现在你所要做的就是从除法中得到模数:int m = num % 10;
之后,只需检查是否bool isEven = m % 2 == 0;
最后,您必须将输入数字除以10
,并重复整个过程直到数字结束。
int a = 123456, oddCounter = 0, evenCounter = 0;
do
{
int m = a % 10;
switch(m % 2)
{
case 0:
evenCounter++;
break;
default: // case 1:
oddCounter++;
break;
}
//bool isEven = m % 2 == 0;
}while( ( a /= 10 ) != 0 );
答案 3 :(得分:1)
对您的代码进行了一些小改动,它完美无缺
int countEven = 0;
int countOdd = 0;
Console.WriteLine( "insert a number" );
char[] nums = Console.ReadLine().ToCharArray();
for ( int i = 0; i < nums.Length; i++ )
{
if ( int.Parse( nums[i].ToString() ) % 2 == 0 )
{
countEven++;
}
else
{
countOdd++;
}
}
Console.WriteLine($"{countEven} even numbers \n{countOdd} odd numbers");
Console.ReadKey();
我所做的是将每个数字作为数组char[]
中的一个字符,然后循环遍历此数组并检查它是否为偶数。
答案 4 :(得分:0)
static void Main(string args[]) {
WriteLine("Please enter a number...");
var num = ReadLine();
// Check if input is a number
if (!long.TryParse(num, out _)) {
WriteLine("NaN!");
return;
}
var evenChars = 0;
var oddChars = 0;
// Convert string to char array, rid of any non-numeric characters (e.g.: -)
num.ToCharArray().Where(c => char.IsDigit(c)).ToList().ForEach(c => {
byte.TryParse(c.ToString(), out var b);
if (b % 2 == 0)
evenChars++;
else
oddChars++;
});
// Continue with code
}
修改强> 您也可以使用方法体内的辅助(本地)函数来执行此操作:
static void Main(string args[]) {
WriteLine("Please enter a number...");
var num = ReadLine();
// Check if input is a number
if (!long.TryParse(num, out _)) {
WriteLine("NaN!");
return;
}
var evenChars = 0;
var oddChars = 0;
// Convert string to char array, rid of any non-numeric characters (e.g.: -)
num.ToCharArray().Where(c => char.IsDigit(c)).ToList().ForEach(c => {
byte.TryParse(c.ToString(), out var b);
if (b % 2 == 0)
evenChars++;
else
oddChars++;
// Alternative method:
IsEven(b) ? evenChars++ : oddChars++;
});
// Continue with code
bool IsEven(byte b) => b % 2 == 0;
}
为什么我要使用字节?
处理数字时,最好使用不占用RAM的数据类型。 当然,如今可能存在多个100千兆字节的问题,但这是一个不可忽视的问题。 整数占用32位(4字节)RAM,而字节占用一个字节(8位)。
想象一下你正在处理1 mio。一位数字,并将它们分配给整数。您正在使用4 MiB的RAM,而该字节仅消耗1 MiB用于1 mio。数字。
看起来像一位数的数字(在这种情况下使用)只能达到9(0-9),你会浪费28位内存的潜力(2 ^ 28) - 而一个字节最多只能达到255(0-255),你只会浪费一点四位(2 ^ 4)的内存。
答案 5 :(得分:0)
如果输入数字是32位整数(用户选择数字的长度) 如果询问:
private void button1_Click(object sender, EventArgs e) {
int num = ConvertToInt32(textBox1.Text);
int len_num = textBox1.Text.Length;
int[] arn = new int[len_num];
int cEv = 0; pOd = 0; s = 0;
for (int i = len_num-1; i >= 0; i--) { // loop until integer length is got down to 1
arn[i] = broj % 10; //using the mod we put the last digit into a declared array
if (arn[i] % 2 == 0) { // then check, is current digit even or odd
cEv++; // count even digits
} else { // or odd
if (pOd == 0) pOd++; // avoid product with zero
pOd *= arn [i]; // and multiply odd digits
}
num /= 10; // we divide by 10 until it's length is get to 1(len_num-1)
s += arn [i]; // sum of all digits
}
// and at last showing it in labels...
label2.Text = "a) The even digits count is: " + Convert.ToString(cEv);
label3.Text = "b) The product of odd digits is: " + Convert.ToString(pOd);
label4.Text = "c) The sum of all digits in this number is: " + Convert.ToString(s);
}
我们在界面中需要的是用于输入数字的文本框,用于任务的按钮以及用于显示获得的结果的标签。当然,如果我们为for
这样的for (int i = 0; and <= len_num-1; i++)
循环使用经典形式,则会得到相同的结果-因为本质是计算偶数或奇数位,而不是数字输入到序列中的顺序数组