andalousie 发表于 2014-2-5 09:14:23

计算m的n次方

本帖最后由 andalousie 于 2014-2-5 12:47 编辑

用于计算100000位以内的m的n次方
#include<iostream>
#include<string>

std::string CalculateBigpower(int m, int n)
{
      int resulting = {0};
      int front=1;
      int back=1;
      resulting=1;
      int carry=0;
      for(int i=1;i<=n;i++)
      {      
                int j;
                for(j=front; j<=back; ++j)
                {
                        int temp = resulting;
                        resulting =(resulting * m + carry) % 10;
                        carry = (temp * m + carry) / 10;
                }
                if(carry)
                {
                        resulting = carry;
                        carry = 0;
                        back++;
                }
      }
      std::string Numstring;
      for(int i = back; i>0; i--)
                Numstring.append(1, resulting + 48);
      return Numstring;
}

int main()
{
      int m, n;
      while(1)
      {
                std::cin>>m>>n;
                std::string str = CalculateBigpower(m, n);
                std::cout << str << std::endl;
      }
      return 0;               
}

DG_Richard_Du 发表于 2014-2-5 09:45:14

可以用快速幂来算。

牡丹花下死做鬼 发表于 2014-2-5 10:31:57

既然都是100000以内的那可以用 long int 直接调用pow()不就好了啊

andalousie 发表于 2014-2-5 11:54:51

牡丹花下死做鬼 发表于 2014-2-5 10:31 static/image/common/back.gif
既然都是100000以内的那可以用 long int 直接调用pow()不就好了啊

是100000位以内,不是100000以内,拜托。据我所知内有一个整型可以这么长,能够算出2的9999次方。

牡丹花下死做鬼 发表于 2014-2-5 11:58:01

andalousie 发表于 2014-2-5 11:54 static/image/common/back.gif
是100000位以内,不是100000以内,拜托。据我所知内有一个整型可以这么长,能够算出2的9999次方。

好吧 我看错了表生气啊{:5_111:}

andalousie 发表于 2014-2-5 12:48:25

牡丹花下死做鬼 发表于 2014-2-5 11:58 static/image/common/back.gif
好吧 我看错了表生气啊

不生气。你一说我又检查了一下。结果发现3的n次方出现了问题,现在改正了{:5_105:}
页: [1]
查看完整版本: 计算m的n次方