大数运算--幂次方运算
发布时间:2020-12-14 03:59:05 所属栏目:大数据 来源:网络整理
导读:// 以下算法计算n的m次方// m的定义域是[1,2^31],n的定义域是[0,65535]// 原理就是按位相乘,处理进位#include iostream#include vector#include stdlib.hvoid main( void ){int n = 26,m = 20;div_t dr = { 0 };std::vectorint vecNum( 1,n );// 用vector
// 以下算法计算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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |