C++代码札记(五)水仙花数推算



水仙花数推算:VB

        Dim a = 0, b = 0, c = 0, d = 0, f = 0
        For a = 1 To 9 Step 1 '水仙花数
            For b = 0 To 9 Step 1
                For c = 0 To 9 Step 1
                    d = a * 100 + b * 10 + c
                    f = a ^ 3 + b ^ 3 + c ^ 3
                    'f = Math.Pow(a, 3) + Math.Pow(b, 3) + Math.Pow(c, 3)
                    If d = f Then
                        Console.WriteLine("{0} {1} {2} {3} {4}", d, f, a, b, c)
                    End If
                Next
            Next
        Next

C#            /*一个三位数各位数字的立方和等于该数本身时,该数为水仙花数,输出所有的水仙花数*/

            foreach (int 啊 in Enumerable.Range(100, 899))
            {
                int 个位 = 1, 十位 = 1, 百位 = 1;
                foreach (var aa in Enumerable.Range(0, 3))/*幕算法*/
                {
                    个位 *= 啊 % 10;
                    十位 *= 啊 / 10 % 10;
                    百位 *= 啊 / 100;
                }
                //int 个位 = (int)Math.Pow(啊 % 10, 3), 十位 = (int)Math.Pow(啊 / 10 % 10, 3), 百位 = (int)Math.Pow(啊 / 100, 3);
                if (百位 + 十位 + 个位 == 啊)
                    Console.WriteLine("{0} 百3幕{1} 十3幕{2} 个3幕{3} 该数为水仙花数{4}", 啊, 百位.ToString("000"), 十位.ToString("000"), 个位.ToString("000"), (百位 + 十位 + 个位).ToString("000"));
            }

 

            string 水仙花质数 = "";
            int 质数 = 0;
            while (++质数 < 1000)
            {
                int 位 = 质数.ToString().Length, 半 = 0; Double 立方和 = 0;
                while (位 > 半)
                    立方和 += Math.Pow(int.Parse(质数.ToString()[半++].ToString()), 3);
                if (立方和 == Double.Parse(质数.ToString()))
                    水仙花质数 += 质数 + " ";
            }
            Console.Write("水仙花质数:{0}", 水仙花质数);

C++

	/*水仙花数:数各位立方和等于本身数,三个相同的数相乘,叫做这个数的立方。*/
	int 数字(100), 位和(0), 立方(1), 数(0), 位数 = 数字;
	do
	{
		do
		{
			立方 *= 位数 % 10;
			if (++数 == 3)
			{
				位和 += 立方;
				位数 /= 10;
				立方 = 1; 
				数 = 0;
			}
		} while (位数);
		if (位和 == 数字)
			cout << 数字 << endl;
		位和 = 0;
		立方 = 1;
		位数 = ++数字;
	} while (数字 <= 1000);
void 判断水仙花数(int 数字=(153))
{/*水仙花数:数各位立方和等于本身数,三个相同的数相乘,叫做这个数的立方。*/
	int 位和(0), 立方(1), 数(0), 位数 = 数字;
		do
		{
			立方 *= 位数 % 10;
			if (++数 == 3)
			{
				位和 += 立方;
				位数 /= 10;
				立方 = 1;
				数 = 0;
			}
		} while (位数);
		if (位和 == 数字)cout << "水仙花数:" << 数字 << endl;
		else cout << "请继续输入" << endl;
}

2021-5-23
void 水仙花数()
{
	int a = 153, aa = 0, aaa = 0;
	while (a)aaa = a % 10, aa += aaa*aaa*aaa, a /= 10;
	std::cout << aa << std::endl;
}

void 水仙花数()
{
	int a = 111, aa = 0, aaa = 0, aaaa = a;
	while (aaaa < 10000)
	{
		while (a)aaa = a % 10, aa += aaa*aaa*aaa, a /= 10;
		if (aaaa == aa)std::cout << aa << std::endl;
		a = ++aaaa; aa = 0;
	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值