Мне нужна программа, которая сообщает мне все числа дисариума , меньшие, чем пользовательское число от 10 до 1.000.000 (если возможно, от 10 до бесконечности).Несмотря на то, что vs не отображает никаких ошибок в редакторе, при запуске он отображает следующее сообщение об ошибке: «System.InvalidCastException:« Неверное приведение от Char до Double ».» В одном из
calculation = Math.Pow(Convert.ToDouble(strI[0]), 1.0);
Я пробовал другие методы, чтобы преобразовать символы в двойники, но они выдают те же или другие сообщения об ошибках или неправильно их преобразовывают.Кроме того, я почти уверен, что могу использовать более компактный метод, чем оператор switch, чтобы определить количество цифр в номере (может быть, что-то, что читает длину числа?), Но не знаю как.
//prints out all the disarium numbers lower than a user defined number
static void Main(string[] args)
{
//assigns the variables
string number , strI;
double calculation = 0;
//asks the user for string number
Console.WriteLine("Give a number between 10 and 1.000.000. This program will tell you all the disarium numbers lower than the given number.");
number = Console.ReadLine();
//calcules all the disarium numbers lower than string number
for (int I = 10;I < Convert.ToInt32(number);I++)
{
strI = Convert.ToString(I);
switch (strI.Length)
{
case 1:
calculation = Math.Pow(Convert.ToDouble(strI[0]), 1.0);
break;
case 2:
calculation = Math.Pow(Convert.ToDouble(strI[0]), 1.0) + Math.Pow(Convert.ToDouble(strI[1]), 2.0);
break;
case 3:
calculation = Math.Pow(Convert.ToDouble(strI[0]), 1.0) + Math.Pow(Convert.ToDouble(strI[1]), 2.0) + Math.Pow(Convert.ToDouble(strI[2]), 3.0);
break;
case 4:
calculation = Math.Pow(Convert.ToDouble(strI[0]), 1.0) + Math.Pow(Convert.ToDouble(strI[1]), 2.0) + Math.Pow(Convert.ToDouble(strI[2]), 3.0) + Math.Pow(Convert.ToDouble(strI[3]), 4.0);
break;
case 5:
Console.WriteLine("...");
break;
case 6:
Console.WriteLine("...");
break;
case 7:
Console.WriteLine("...");
break;
default:
break;
}
//Prints out all the desarium numbers below string number
if (calculation == Convert.ToDouble(I))
{
Console.WriteLine(I + " is a disarium number.");
}
}
//Keeps the command line from closing
Console.ReadLine();
Console.WriteLine("Press ENTER to close the program.");
}
Если это не достаточно ясно.Я в основном делаю новую переменную со значением i из цикла for, но в виде строки (я делаю это, чтобы пройти через цифру за символом)
strI = Convert.ToString(I);
Затем я определяю количество цифрчисло ввода имеет с помощью оператора switch.
После этого я делаю переменную, которая является 1-м символом i-й дроби 1, 2-м символом i-й дроби 2 ... до тех пор, пока она не достигнет количества цифр.
Math.Pow(Convert.ToDouble(strI[0]), 1.0) + Math.Pow(Convert.ToDouble(strI[1]), 2.0)...
и, наконец, я сравниваю i с результатом вычисления
if (calculation == Convert.ToDouble(I))
Если переменные совпадают, это число с дисарием.
Заранее спасибо!
~ Эммануил