baigeiMaster 2022-12-25 00:50 采纳率: 100%
浏览 145
已结题

数据结构高次幂运算问题

Problem Description
计算 a 的 b 次方对 1e9+7 取模以后的结果。

输入
两个超大正整数 a 和 b。(1 <= a,b <= 1e100)

输出
a 的 b 次方对 1e9+7 取模以后的结果,然后换行。

样例输入
2 10
样例输出
1024

  • 写回答

7条回答 默认 最新

  • 白驹_过隙 算法领域新星创作者 2022-12-25 09:07
    关注

    用数组来存储结果

    img

    #include<stdio.h>
    #define MOD 1000000007
    int main()
    {
        int arr[1000] = {0};    //用于存放计算的数据,初始化为0
        arr[999] = 1;    //最初:数组最后一个元素定义为1
        int i = 0;
        int N = 0;//底数
        int M = 0;//指数
        scanf("%d %d",&N,&M);
        //有1000个元素,最后一个元素下标为:999
        for(i = 0 ;i < M;i++)
        {
            int j = 0;
            for(j = 999;j>=0;j--)
            {
                arr[j] *=N;    //数组中的每一位元素都乘以底数
                //最初只有数组最后一位乘了,因为其他位全为0
            }
             for(j = 999;j>=0;j--)
             {
                 //如果数组中的元素大于等于10就进位,把余数放到本身,商放到上一个位置
                 if(arr[j] >= 10)
                 {
                     arr[j-1] += arr[j]/10;//商进位到上一个位置
                     arr[j] = arr[j] %10;//本身位置取余数
                 }
             }
        }
        //最后遍历数组找到数组元素第一个不为0的位置
        int index = 0;
          for (i = 0; i < 1000; i++)
          {
             if (arr[i] == 0 && arr[i + 1] != 0)
            {
                 //i+1位置元素不为0
                index = i + 1;
                break;
            }
          }
          int mod = 0;
      for (int i = 0; i < 1000; i++) {
        mod = (mod * 10 + arr[i]) % MOD;
      }
      printf("%d\n", mod);
        
        return 0;
    }
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 1月3日
  • 已采纳回答 12月26日
  • 创建了问题 12月25日

悬赏问题

  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?