我正在撰寫一個程式來檢查用戶輸入的數字是否是 kaprekar 數字(一個正方形的數字可以拆分并添加以獲得原始數字)但是我只能撰寫一個真正僅適用于1 & 2數字正方形的程式(1 & 1和9 & 81),這是我的代碼:
double kaprekarNum = 0;
kaprekarNum = int.Parse(Console.ReadLine());
double kmSqr = Math.Pow(kaprekarNum, 2);
string kmSqrString = kmSqr.ToString();
double[] kmSqrDouble = new double[kmSqrString.Length];
for(int i = 0; i < kmSqrString.Length; i )
{
kmSqrDouble[i] = int.Parse(kmSqrString[i].ToString());
kapTest = kapTest kmSqrDouble[i];
}
if(kapTest == kaprekarNum)
{
Console.WriteLine("{0} is a kaprekar.", kaprekarNum);
}
else if(kapTest != kaprekarNum)
{
Console.WriteLine("{0} is not a kaprekar.", kaprekarNum);
}
如您所見,程式將數字拆分為 1 位數字,這不是我想要的。我需要它把它分成各種可能的方式,然后把它加起來,但我不知道如何解決這個問題。你會怎么做?
uj5u.com熱心網友回復:
我會避免使用double. 這是一個簡單的實作。我認為您在回圈字串而不是將其切成左右段時犯了一個錯誤:
int testNbr = 297;
//beware overflow potential
int testSqrd = testNbr*testNbr;
string testSqrdStr = testSqrd.ToString();
// The right-most testNbr.Length digits from the squared value
string right = testSqrdStr.Substring(testSqrdStr.Length - testNbr.ToString().Length);
// The left most remaining
string left = testSqrdStr.Substring(0, testSqrdStr.Length - right.Length);
int result = int.Parse(right) int.Parse(left);
bool isKaprekar = testNbr == result;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/380287.html
上一篇:團隊生成器的演算法
