1.求出0~100000之间的所有“水仙花数”并输出。
“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。
int main()
{
int i = 0;
for (i = 0; i <= 100000; i++)//产生1~100000个数字
{
int coult = 0;
int tmp = i; //需要i的值,但不想改变i
while(tmp!= 0)//判断i为几位数
{
tmp /= 10;
coult++;
}
tmp = i; int sum = 0;
while (tmp!= 0)
{
int n = tmp % 10; //获得i最后一位数
tmp = tmp / 10; //获得i最后一位以外的数
sum += pow(n, coult); //pow库函数:计算次方,如例:计算n的coult次方
}
if (sum == i)
{
printf("%d ",i);
}
}
return 0;
}
2.用递归实现pow函数:
int Pow(int n, int k) //设一个函数计算n的次方,n的次方=n*(n-1)的次方 { if(k==0) return 1; else if(k>=1) { return n*Pow(n, k-1); } }
冒泡排序:
void maopao(int arr[], int sz)
{
for (int i = 0; i < sz-1; i++) // 移动次数,下面代码每次移动一次,移动sz-1次后移动完全.
{
for (int j = 0; j < sz-1-i; j++) //最大的在最后之后,只需比较最大数之前的数字.
{
if (arr[j] > arr[j + 1])//相邻两个数比较,大的后排,最后最大的数在最后面
{
int temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
for (int c = 0; c < sz; c++)
{
printf("%d ", arr[c]);
}
}
int main()
{
int arr[]{ 1,5,6,7,8,3,4, };
int sz = sizeof(arr) / sizeof(arr[0]);
maopao(arr, sz);
return 0;
}