using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 自守数 { class Program { static void Main(string[] args) { long faciend, num, mod, n_mod, p_mod;//mod被乘数的系数,n_mod乘数的系数。p_mod部分乘数 long i, t, n;//临时变量 Console.Write("输入最大数:"); num = int.Parse(Console.ReadLine()); Console.WriteLine("1--" + num + "之间有以下自守数:"); for (i = 1; i < num; i++) { faciend = i;//被乘数 mod = 1; do { mod *= 10;//被乘数的系数 faciend /= 10; } while (faciend > 0);//循环求出被乘数的系数 p_mod = mod;//p_mod为截取部分积时的系数 faciend = 0;//积的最后N位 n_mod = 10;//n_mod为截取乘数相应位时的系数 while (mod > 0) { t = i % (mod * 10);//获取被乘数 n = i % n_mod - i % (n_mod / 10);//分解出每一位乘数作为乘数 t = t * n;//相乘的结果 faciend = (faciend + t) % p_mod;//截取乘积的后几位 mod /= 10;//调整被乘数的系数 n_mod *= 10;//调整乘数的系数 } if (i == faciend)//若为自守数,则输出 { Console.Write(i+" "); } } Console.ReadKey(); } } }
时间: 2024-10-11 18:12:08