天天看点

变种水仙花-c++

题目描述

变种水仙花数 - Lily Number:把任意的数字,从中间拆分成两个数字,比如1461 可以拆分成(1和461),(14和61),(146和1),如果所有拆分后的乘积之和等于自身,则是一个Lily Number。

例如:

655 = 6 * 55 + 65 * 5

1461 = 1461 + 1461 + 146*1

求出 5位数中的所有 Lily Number。

输入描述:

输出描述:

一行,5位数中的所有 Lily Number,每两个数之间间隔一个空格。

OJ代码(一)

#include<iostream>
using namespace std;
int main ()
{
    long sum1,sum2,sum3,sum4,sum5;
    for(long i=10000;i<=99999;i++)
    {
    	sum1=(i/10)*(i%10);
    	sum2=(i/100)*(i%100);
    	sum3=(i/1000)*(i%1000);
    	sum4=(i/10000)*(i%10000);
    if(i==sum1+sum2+sum3+sum4)
        cout<<i<<" ";
    }
}
           

错误代码

#include<iostream>
using namespace std;
int main ()
{
    int sum;
    for(int i=10000;i<=99999;i++)
    {
     sum=i/10*i%10+i/100*i%100+i/1000*i%1000+i/10000+i%10000;
     **//错误原因:计算过程中i发生了变换**
    if(i==sum)
        cout<<sum<<" ";
    }
}
           

OJ代码(二)

#include<iostream>
using namespace std;
int main ()
{
    int sum;
    for(int i=10000;i<=99999;i++)
    {
    	int sum=0,mod=10000,cur=i;
    	//当mod/10=0时退出循环
    	while(mod/10)
    	{
    		sum+=(cur/mod)*(cur%mod);
    		mod/=10;
		}
	if(sum==i)
	cout<<i<<" ";
    }
}
           

继续阅读