c++打卡第三十天

一、阿姆斯特朗数

1、、问题描述

 2、设计思路

可以从1开始遍历,如果我们使用数组存储一个数的每位数,那么如此在位数不同的范围中需要不同长度的数组 ,如此过于繁琐,那么我们可以对一个数求余,对每个求余的立方数相加,然后对这个数除以10,直到这个数为0,然后将立方和得到的数与原数比较,如果数相同,那么这个数就是阿姆斯特朗数。

3、流程图

4、代码实现

#include<iostream>
using namespace std;
int main()
{
    long n,nn,a,count;
    for(n=1;n<1000;n++)
    {
        nn=n;
        count=0;
        while(nn!=0)
        {
            a=nn%10;
            count+=a*a*a;
            nn/=10;
        }
        if(count==n)
        {
            cout<<"阿姆斯特朗数为:   "<<n<<endl; 
        }
    }
    return 0;
 } 

5、结果实现

 二、高次方数的尾数

1、问题描述

 

2、设计思路

我们这次求一个数的n次方的 最后n位数,我们可以发现,对于高位的乘法,不需要对其进行乘法运算,只需要所需要的最后几位数与这个数进行乘法运算。即last=last*x%pow(10,n);

3、流程图

4、代码实现

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    int x,y,n,i=1,last=1;
    int flag=1;
    while(flag)
    {
        last=1;
        cin>>x;
        cin>>y;
        cin>>n;
        for(i=1;i<=y;i++)
        {
            int len=pow(10,n);
            last=(last*x)%len;
        }
        cout<<x<<""<<y<<"次方的"<<n<<"位尾数为:"<<last<<endl; 
        cout<<"是否继续测试,是输入1 ,否输入0"<<endl;
        cin>>flag; 
    }
    return 0;
 } 

5、结果实现

 6、该函数使用循环来计算的y次方的末x位。为了避免超出实数范围,我们使用模运算来保持结果的位数。在循环中,我们将累积乘积取模以防止溢出。最后,我们返回累积乘积的末x位。

#include <iostream>
#include <cmath>

using namespace std;

int powMod(int n, int y, int x) {
    int res = 1;
    for (int i = 0; i < y; i++) {
        res = res * n % (int) pow(10, x);
    }
    return res;
}

int main() {
    int n, y, x;
    cin >> n >> y >> x;
    cout << powMod(n, y, x) << endl;
    return 0;
}

 

posted @ 2023-05-18 14:06  七安。  阅读(60)  评论(0编辑  收藏  举报