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日
  • 展开全部

悬赏问题

  • ¥20 Html备忘录页面制作
  • ¥15 黄永刚的晶体塑性子程序中输入的材料参数里的晶体取向参数是什么形式的?
  • ¥20 数学建模来解决我这个问题
  • ¥15 计算机网络ip分片偏移量计算头部是-20还是-40呀
  • ¥15 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
  • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
  • ¥30 NIRfast软件使用指导
  • ¥20 matlab仿真问题,求功率谱密度
  • ¥15 求micropython modbus-RTU 从机的代码或库?
  • ¥15 django5安装失败