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,小于则两者互换

image-20210520201111720

#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语言水仙花数等练习的主要内容,如果未能解决你的问题,请参考以下文章

C语言if语句练习题

C语言if语句练习题

C语言if语句练习题

for语句的强化(水仙花,九九乘法表,回文数等)

C语言习题练习4

大学生必学练习题 - C 语言经典50例