A尾相等数

题目描述:

从键盘输入一个int数A(A > 1),如果存在int数X和Y(X>Y),使得A^X和A^Y均大于1000,且他们的末尾三位数相等,则称X和Y是一对“A尾相等数”

求:
任意输入A,使得X+Y值最小的A尾相等数。

如:
A = 2  ---》  X+Y = 120

分析:

 

代码:

 1 using  System;
 2 using  System.Collections.Generic;
 3 using  System.Text;
 4
 5 namespace  ConsoleApplication1
 6 {
 7    class Program
 8    {
 9        static void Main(string[] args)
10        {
11            //得到指定的数字
12            int a = Int32.Parse(Console.ReadLine());
13
14            //经过运算后的总值,但是只保存最后三位。
15            int sum = a;
16
17            //保存所有X的值时尾数的大小
18            int[] v = new int[1000];
19
20            //求X的最小值,使得A^X大于1000
21            int x = 1;
22            
23            if (a < 1000)
24            {
25                x = getMinX(a);
26            }

27
28            for (int i = 0; i < x; i++)
29            {
30                sum = getSumA(sum, a);
31            }

32
33            //不断地给X加1,记录A^X的末尾3位数的值和X的值,直到A^X的末尾3位数出现重复的数字
34            do
35            {
36                v[sum] = x;
37                sum = getSumA(sum, a);
38                x++;
39            }
 while (v[sum] == 0);
40
41            //将当前X和值与原先记录A^X的末尾3位数的值的X值相加,输出最终的结果
42            Console.WriteLine(x + v[sum]);
43        }

44
45        /// <summary>
46        /// 得到sum 与 a 相乘后的最后三位数
47        /// </summary>
48        /// <param name="p"></param>
49        /// <returns></returns>

50        private static int getSumA(int sum, int a)
51        {
52            return getLast3Num(getLast3Num(sum) * getLast3Num(a));
53        }

54
55        /// <summary>
56        /// 得到P的最后三位数
57        /// </summary>
58        /// <param name="p"></param>
59        /// <returns></returns>

60        private static int getLast3Num(int p)
61        {
62            if (p >= 1000)
63            {
64                string t = p.ToString();
65                string s = t.Substring(t.Length - 3);
66                return Int32.Parse(s);
67            }

68
69            return p;
70        }

71
72        /// <summary>
73        /// 求X的最小值,使得A^X大于1000
74        /// </summary>
75        /// <param name="p"></param>
76        /// <returns></returns>

77        private static int getMinX(int p)
78        {
79            return (int)(Math.Log(1000/ Math.Log(p)) + 1;
80        }

81    }

82}

83

测试结果:
输入25,输出7
输入125,输出6
输入1000,输出3
输入1111111,输出52
输入1000003,输出102
输入123454321,输出27
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值