Компилаторът майтап ли си прави?
Здравейте, банда :)
Накратко, искам да видгна на степен и ползвам следното:
Math.Pow(snowballValue, snowballQuality);
Нищо не се получава, но като пробвам същото в Immidiate window си ми го смята коректно. WTF!?!?! Това е кодът:
using System;
namespace Snowballs
{
class Program
{
static void Main(string[] args)
{
int snowballs = 2;
int snowwballSnow = 0;
int snowballTime = 0;
int snowballQuality = 0;
int counter = 0;
int snowballValue = 0;
int finalScore = snowballValue;
int pow = 0;
while (counter <= snowballs)
{
snowwballSnow = int.Parse(Console.ReadLine());
snowballTime = int.Parse(Console.ReadLine());
snowballQuality = int.Parse(Console.ReadLine());
snowballValue = (snowwballSnow / snowballTime);// ^ snowballQuality;
Math.Pow(snowballValue, snowballQuality);
if (snowballValue > finalScore)
{
finalScore = snowballValue;
}
counter++;
}
Console.WriteLine($"{snowballs} : {snowballTime} = {snowballValue} ({snowballQuality})");
}
}
}
Доколкото разбирам функцията, би трябвало да правя присвояването с
Реално казвам,
Или не го разбирам правилно? Не ми приема за валиден код:
int var =
Math.Pow(snowballValue, snowballQuality);
Аз го извъртях с цикъл, ама не искам така, мега дърводелско е. Искам да го напрвя с тази готова функция... :(
Предполагам си натрупал много информация която трябва да си дадеш време да обработиш.
1 - var е съкращение от variable и преди беше ползвана за "жива" променлива в кода, която можеш да използваш за извличане на натрупаните данни в нея. Сега се ползва за "съкратен" достъп до int, char, string и т.н. общо взето за деклариране на обект в кода ти. Представи си ако си създал клас с име "KonvertAndCalculateAnywereVariable". Променливата "var" замества името на класа, т.е. ако искаш да го декларираш променлива за класа в зависимост от логиката на класа, декларацита ще изглежда нещо подобно - var myVariable = new KonvertAndCalculateAnywereVariable().
2 - Прозореца за тестове "Immediate window" извиква метода Math.Pow() и ти показва какъв изход ще имаш с подадените стойности, тоест какво можеш да очакваш като резултат. Ако търсиш функционалност и резултат от кода си, трябва да присвоиш променлива на MathPow(), като съобразиш какъв тип данни да бъде тя. Мисълта ми е, че "int var" в случая не е решение защото ако "var" е име на променрива, то int не е типа който Math.Pow ще върне, а ако очакваш "var" да присвои типа, то би трябвало да махнеш int и след var да дадеш име на променлива.
3 - на кратко, проблема от задачата се решава с променливи тип decimal. По принцип би трябвало да стане и с double, но след последната точност при закръгляне след десетичната запетая приложено от ъпдейта на Net.Core, Judge няма да ти върне грешка ако ползваш decimal, а в конкретния случай ти е необходим типа BigInteger.
ето примерен код за да ме разбереш какво искам да кажа
Типът и променливата
приемат стойност от метода "Pow" на класа "BigInteger", който от своя страна имплиментира типа BigInteger, което е еквивалент на "Math.Pow" който е метод за тип данни double. Стойността е всъщност числото повдигнато на степен, която търсиш..... :)
Значи, това е финалното, знам, че се разпрострях, но не исках да го правя с масиви, тъй като задачата е от преди да ги вземем. Не знаех, че Math.Pow работи с определни типове данни. C double "заспа"! Много ти Благодаря, оказа ми страхотна помощ! А относно var, тъпо го написах. Просто име на някакв аvariable. Все едно int test.