两种分解整数为字符串的方法 阿姆斯特朗数

9 篇文章 1 订阅

以“阿姆斯特朗数”求解为例:

阿姆斯特朗数:如果一个正整数等于其各个数字的立方和,
    则该数称为阿姆斯特朗数(亦称为自恋性数),1除外,
    如407 = 4^3+0^3+7^3就是一个阿姆斯特朗数。

/*
功能: 求n(n ≤ 65536)以内的所有阿姆斯特朗数

原型:
    int CalcArmstrongNumber(int n);

输入参数:
    int n: n ≤ 65536

返回值:
    n以内的阿姆斯特朗数的数量。
*/

方法1:采用求余、取商的方法逐个分解

int CalcArmstrongNumber(int n)
{
    /*在这里实现功能*/
	int temp = 0;
	int num[10] = {0};//按题目要求,最多10位数字
	int cnt = 2;
	int ind = 0;
	int flag = 0;
	int sum = 0;
	int comp = 0;
	for(;cnt < n;++cnt)
	{
		temp = cnt;
		while(temp > 9)
		{
			num[ind] = temp % 10;
			temp /= 10;
			++ind;
		}
		num[ind] = temp;
		for(int i = 0;i <= ind;++i)
		{
			flag = num[i];
			num[i] = flag * flag *flag;
			sum += num[i];
		}
		if(cnt == sum)  //进行对比看看是不是阿姆斯特朗数  
			++comp;
		memset(num,0,ind+1);
		ind = 0;
		sum = 0;//sum也要清零啊,下次重新开始计数
	}
	return comp;
}
方法2、采用sprintf的方式将数字转换为字符串
int CalcArmstrongNumber(int n)
{
        char temp[6];//第二种方法
	memset(temp,'\0',6);
	int ntem[6] = {0};
	int flag = 0;
	int num = 0;
	int len = 0;
	int cnt = 0;
	for(int i = 2;i <= n;++i)
	{
		sprintf(temp,"%d",i);
		len = strlen(temp);
		for(int j = 0;j < len;++j)
		{
			flag = (int)(temp[j] - '0');//必须要转化一下,整数和字符间是有区别的
			//flag = temp[j];
			ntem[j] = flag;
			for(int k = 0;k < 2;++k)
			{				
				ntem[j] *= flag;
			}
			num += ntem[j];
		}
		if(i == num)
			++cnt;
		//memset(temp,'\0',6);//这里不清零也可以,因为后面的数都比前面的要长
		num = 0;//一定要注意清零
	}
	return cnt;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值