top of page

Power Of A Number Algorithm

C# / Unity

using System.Globalization;
using UnityEngine;
using TMPro;

public class PowerNumChecker : MonoBehaviour
{
    public TextMeshProUGUI outputText;
    public TMP_InputField powerNumInputField;

    private TMP_InputField valueInputField;

    private int powerInput, valueInput;

    private void Start()
    {
        valueInputField = GetComponent<TMP_InputField>();
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Return))
        {
            //Check if numbers were inputted or not
            if (int.TryParse(valueInputField.text, NumberStyles.Number, CultureInfo.CurrentCulture.NumberFormat, out valueInput) &&
                int.TryParse(powerNumInputField.text, NumberStyles.Number, CultureInfo.CurrentCulture.NumberFormat, out powerInput))
            {
                //Check if number is too small for powers
                if(powerInput > 1 || powerInput < -1)
                {
                    //Check if a power
                    if (CheckInput(valueInput, powerInput))
                    {
                        outputText.text = "'" + valueInput.ToString("#,##0") + "' IS a power of '" + powerInput.ToString("#,##0") + "'";
                    }
                    else
                    {
                        outputText.text = "'" + valueInput.ToString("#,##0") + "' Is NOT a power of '" + powerInput.ToString("#,##0") + "'";
                    }
                }
                //Tell user input is too small
                else
                {
                    outputText.text = "'" + powerInput.ToString() + "' is too small for it to have any powers.";
                }
            }
            //Tell user input was invalid
            else
            {
                outputText.text = "No int (Numbers) were entered, \none was too big, or only one number was entered.";
            }

            //Reset input fields
            valueInputField.text = "";
            powerNumInputField.text = "";
        }
    }

    public bool CheckInput(int valueNumber, int powerNumber)
    {
        //If they're the same, avoid computing
        if(valueNumber == powerNumber)
        {
            return true;
        }
        //Actually iterate through
        else
        {
            for (int i = powerNumber; i < valueNumber;)
            {
                //Multiply i to power number to get to value
                i *= powerNumber;
                //End the loop with true if they're equal to each other
                if (i == valueNumber)
                {
                    return true;
                }
                //Loop is bigger than the value, so return false
                else if (i > valueNumber)
                {
                    return false;
                }
            }
        }
        return false;
    }
}

bottom of page