// 以下算法计算n的m次方 // m的定义域是[1,2^31],n的定义域是[0,65535] // 原理就是按位相乘,处理进位 #include <iostream> #include <vector> #include <stdlib.h> void main( void ) { int n = 26,m = 20; div_t dr = { 0 }; std::vector<int> vecNum( 1,n ); // 用vector存储大数,首位赋n for ( int i = 0; i < m - 1; ++i,dr.quot = 0 ) // 每次将上次的商清零 { // 循环乘m次 for ( std::vector<int>::iterator cur = vecNum.begin(); cur != vecNum.end(); *(cur++) = dr.rem ) { // 对大数的每一位都乘以n *cur = *cur * n + dr.quot; // 加上上一位的余数 dr = div( *cur,10 ); // 取10的余,保留个位数 } // 下面的循环处理进位使位数增加的情况 for ( dr = div( dr.quot,10 ); dr.quot || dr.rem; dr = div( dr.quot,10 ) ) vecNum.push_back( dr.rem ); } // 下面输出,从最后的最高位开始 for ( std::vector<int>::reverse_iterator rcur = vecNum.rbegin(); rcur != vecNum.rend(); ++rcur ) std::cout << *rcur; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。