ホームページ >バックエンド開発 >C#.Net チュートリアル >C# のアームストロング数
アームストロング数は、その桁の 3 乗の合計に等しい数です。 N 桁で構成され、各桁の N 乗の合計に相当します。たとえば、0、1、153、370、371、および 407、1634、8208、9474 を含む数値はアームストロング数値とみなされます。このトピックでは、C# のアームストロング数について学びます。
暗号化と復号化のプロセスでは、秘密鍵として指定されるアームストロング番号が使用されます。 2 人の対象ユーザー間の保護を伴う認証を行うには、サーバーが使用されます。送信者と受信者はサーバーの助けを借りて検証されます。
ロジック
アームストロング数の背後にある論理を確認するために、数値の 1 つを使用してアームストロング数法について簡単に説明します。ロジックを説明するには、数字を 407 と考えてください。
407 = (4*4*4) + (0*0*0) + (7*7*7)
ここでは、以下に示すように各数値を 3 回掛けます。
(4*4*4) = 64
(0*0*0) = 0
(7*7*7) = 343
したがって、上記で乗算した数値を加算すると、次のような結果が得られます。
64+0+343 = 407
以下に挙げる例を次に示します。
コード:
using System; using System.Collections.Generic; using System.Linq; public class Program { public static void Main() { int i = 0; int num = 0; int[] numArray = new int[10]; double res = 0; //Step 1 : Provide the number in this step Console.Write("Please enter the number : "); int number = int.Parse(Console.ReadLine()); //Step 2 : Now store the number in a temporary variable int tmpryNum = number; //Step 3 : Calculate the total number of integers in number and store each integer in the digit array while (number > 0) { numArray[i++] = number % 10; number = number / 10; num++; } //Step 4 : Calculate the number for (i = 0; i < num; i++) { res += Math.Pow(numArray[i], num); } //Step 5 : Check whether number is prime or not if (res == tmpryNum) { Console.WriteLine($"The number {tmpryNum} is armstrong"); } else { Console.WriteLine($"The number {tmpryNum} is not armstrong"); } Console.ReadLine(); } }
出力:
コード:
using System; using System.Collections.Generic; using System.Linq; public class Program { public static void Main() { int mynum, remainder, res = 0; Console.Write("Please enter an integer number: "); mynum = int.Parse(Console.ReadLine()); for (int m = mynum; m > 0; m = m / 10) { remainder = m % 10; res = res + remainder*remainder*remainder; } if (res == mynum) { Console.Write("The number entered by you is an Armstrong number..."); } else Console.Write("The number entered by you is not an Armstrong number..."); Console.ReadLine(); } }
出力:
コード:
using System; using System.Collections.Generic; using System.Linq; public class Program { public static void Main() { int mynum,m, res=0,r; Console.Write("Please enter the number :"); mynum = Convert.ToInt32(Console.ReadLine()); m = mynum; while(m!=0) { r=m%10; res =res+(r*r*r); m = m / 10; } if(res==mynum) Console.WriteLine("The number which you have entered is an Armstrong Number..."); else Console.WriteLine("The number which you have entered is not an Armstrong Number..."); Console.ReadKey(); } }
出力
コード:
using System; using System.Collections.Generic; using System.Linq; public class Program { public static void Main() { int mynum,val,res,temp_var; int start_no,end_no; Console.Write("\n\n"); Console.Write("Searching for the Armstrong number in a given range of range of numbers:\n"); Console.Write("--------------------------------------------------------"); Console.Write("\n\n"); Console.Write("Enter the starting number... "); start_no= Convert.ToInt32(Console.ReadLine()); Console.Write("Enter the ending number... "); end_no= Convert.ToInt32(Console.ReadLine()); Console.Write("The list of Armstrong numbers in given above range are: "); for(mynum=start_no;mynum<=end_no;mynum++){ temp_var=mynum; res = 0; while(temp_var!=0){ val=temp_var % 10; temp_var=temp_var/10; res=res+(val*val*val); } if(res==mynum) Console.Write("{0} ",mynum); } Console.Write("\n"); } }
出力:
コード:
using System; using System.Collections.Generic; using System.Linq; public class Program { public static void Main() { Console.Write("Enter the Start Number : "); int StartNumber = int.Parse(Console.ReadLine()); Console.Write("Enter the End Number : "); int EndNumber = int.Parse(Console.ReadLine()); Console.WriteLine($"The Armstrong Numbers between {StartNumber} and {EndNumber} are : "); for (int i = StartNumber; i <= EndNumber; i++) { if (IsArmstrongNumber(i)) Console.WriteLine(i); } Console.ReadLine(); } static bool IsArmstrongNumber(int number) { int sum = 0; int temporaryNumber = number; int temp = 0; int length = number.ToString().Length; while (number != 0) { temp = number % 10; number = number / 10; sum += (int)Math.Pow(temp, length); } if (sum == temporaryNumber) { return true; } else { return false; } } }
出力:
コード:
using System; public class Program { // This function is used to find Nth Armstrong Number static int ArmstrongNum(int n) { int cnt = 0; // specifying the upper limit from integer for(int m = 1; m <= int.MaxValue; m++) { int num = m, rem, digit = 0, res = 0; num = m; // Calculate the total digits in num digit = (int) Math.Log10(num) + 1; // Calculate sum of power of digits while(num > 0) { rem = num % 10; res = res + (int)Math.Pow(rem, digit); num = num / 10; } // Check the Armstrong number if(m == res) cnt++; if(cnt == n) return m; } return n; } public static void Main() { int n = 15; Console.WriteLine(ArmstrongNum(n)); } }
出力:
コード:
using System; public class Program { int power(int a, long b) { if( b == 0) return 1; if (b % 2 == 0) return power(a, b / 2) * power(a, b / 2); return a * power(a, b / 2) * power(a, b / 2); } int myfunc(int a) { int n = 0; while (a != 0) { n++; a = a / 10; } return n; } bool ArmstrongNum (int a) { int n = myfunc(a); int tmp_var = a, res = 0; while (tmp_var != 0) { int rs = tmp_var % 10; res = res + power(rs, n); tmp_var = tmp_var / 10; } return (res == a); } public static void Main() { Program pgm = new Program(); int a = 8208; Console.WriteLine(pgm.ArmstrongNum(a)); a = 1423; Console.WriteLine(pgm.ArmstrongNum(a)); } }
出力:
これまで、C# でアームストロング数をどのように利用できるかを研究してきました。数理論では、ナルシスト数として知られています。この記事により、上で説明した内容が C# の知識に付加価値を与えてくれれば幸いです。アームストロング数字テクニックを使用する上記のさまざまな方法で示されているように、さまざまな種類の数字を試してみてください。
以上がC# のアームストロング数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。