T、DZ 2023-02-19 22:02 采纳率: 83.3%
浏览 42
已结题

C语言 问题 J: 高次方数

题目描述
求m的n次方(12<m,n<=130000000000)的最后三位数。
例如:13的13次方的最后三位数是253,13的20次方的最后三位数是801。
输入
有多组测试数据 每组测试数据一行,包含2个数据,即整数m和n,两个数用逗号隔开。
输出
每行输出m的n次方的最后三位数。
样例输入
13,13
13,20
样例输出
253
801

img

经过我多次输入测试,我发现m的n次幂结果只和n的后两位数有关,而且后三位数只由两个相乘的数的后三位有关,为此我才设置了if(n<10000)来验证,所以我的代码是这样的:

#include <stdio.h>
int main()
{
    long long m,n,i,j;
    while(scanf("%lld,%lld",&m,&n)!=EOF)
    {
        m%=1000;
        j=m;
        if(n<10000)
        {
            for(n; n>1; n--)
            {
                i=m*j;
                j=i%1000;
            }
        }
        else
        {
            n%=100;
            for(n; n>1; n--)
            {
                i=m*j;
                j=i%1000;
            }
        }
        i%=1000;
        printf("%03lld\n",i);
    }
    return 0;
}

但是测试一直过不去,然后我又看到了一个能过去的代码,虽然好像这代码不太正确,但是我俩测试的数据都符合,找不到原因。
能过的代码:

#include<stdio.h>

int main()
{
    long long int i,x,y,last;    /*变量last保存求X的Y次方过程中的部分乘积的后三位*/
    // 输入
    while(scanf("%lld,%lld",&x,&y)==2)
    {
        last=1;
        x %= 1000;      // 因为一个三位数的n次方的最后三位数只和这个数的最后三位数有关
        y%=100;         // 因为可以发现这个是一个轮回,也就是说 (13,13)==(13,113)
        // 需要注意轮回的起始位置是13
        if(y<13)
        {
            y+=100;
        }
        // 核心计算
        for(i=0; i<y; i++)
            last=last*x%1000;
        // 补充0
        if(last<100)
        {
            printf("0");
            if(last<10)
            {
                printf("0");
                if(last<1)
                {
                    printf("0\n");
                    continue;
                }
            }
        }
        printf("%d\n",last%1000); /*打印结果*/

    }
    return 0;
}

本代码转载自CSDN博主「smile-yan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/smileyan9/article/details/80773994?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167712000616800192244692%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167712000616800192244692&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-80773994-null-null.142^v73^wechat_v2,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=m%E7%9A%84n%E6%AC%A1%E6%96%B9%E7%9A%84%E6%9C%80%E5%90%8E%E4%B8%89%E4%BD%8D%E6%95%B0&spm=1018.2226.3001.4187

  • 写回答

4条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-02-21 02:24
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 6月12日
  • 已采纳回答 6月4日
  • 修改了问题 2月23日
  • 修改了问题 2月23日
  • 展开全部

悬赏问题

  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!