以“阿姆斯特朗数”求解为例:
阿姆斯特朗数:如果一个正整数等于其各个数字的立方和,
则该数称为阿姆斯特朗数(亦称为自恋性数),1除外,
如407 = 4^3+0^3+7^3就是一个阿姆斯特朗数。
/*
功能: 求n(n ≤ 65536)以内的所有阿姆斯特朗数
原型:
int CalcArmstrongNumber(int n);
输入参数:
int n: n ≤ 65536
返回值:
n以内的阿姆斯特朗数的数量。
*/
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;
}