C语言水仙花数等练习
Posted 小赵小赵福星高照~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言水仙花数等练习相关的知识,希望对你有一定的参考价值。
水仙花数
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
打印出0-100000的水仙花数
解题思路
1.先求出n是几位数
2.根据水仙花数概念判断是不是水仙花数
#include<stdio.h>
#include<math.h>
int counti(i)//计算出位数
{
int count = 0;
while (i > 0)
{
i = i / 10;
count++;
}
return count;
}
Isshuixianhua(int i)
{
int n = counti(i);
double sum = 0.0;
int temp = i;//我们需要保存i的值,因为while循环语句里面会改变i值,方便下方if语句进行判断
while (i)
{
sum += pow(i % 10, n);//计算次方
i /= 10;//去掉最后一位
}
if (temp == sum)
return 1;
else
return 0;
}
int main()
{
int i = 0;
for (i = 0; i <= 100000; i++)
{
if (Isshuixianhua(i))//判断
{
printf("%d ", i);
}
}
return 0;
}
奇数在偶数前面
解题思路
1.分别给两个指针begin,end,begin指向数组头,end指向数组尾
2.当begin指向不是偶数时,begin++
3.当end指向不是奇数时,end–
4.当begin指向偶数,end指向奇数时,判断begin是否小于end,小于则两者互换
#include<stdio.h>
#include<assert.h>
#include<string.h>
void ChangeArr(char* begin, char* end)
{
assert(begin && end);
while (begin < end)
{
while ((*begin) % 2 == 1)
{
begin++;
}
while ((*end) % 2 == 0)
{
end--;
}
if (begin < end)
{
char temp = *begin;
*begin = *end;
*end = temp;
begin++;
end--;
}
}
}
int main()
{
char arr[] = { 1,2,3,4,5,6,7,8,9 };
int sz = sizeof(arr)/sizeof(arr[0]);
ChangeArr(arr, arr + sz - 1);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
2+22+222+2222+22222(找规律的题)
解题思路:
0*10+2=2
2*10+2=22
22*10+2=222
222*10+2=2222
2222*10+2=22222
int main()
{
printf("请分别输入数字和要停止的位数:");
int a = 0;
int b = 0;
int n = 0;
int sum = 0;
scanf("%d %d", &a,&b);
int i = 0;
for (i = b; i > 0; i--)
{
n = n * 10 + a;
sum += n;
}
printf("%d\\n", sum);
return 0;
}
以上是关于C语言水仙花数等练习的主要内容,如果未能解决你的问题,请参考以下文章