2的N次方求解-----C++
2024-09-06 03:17:15
2的N次方求解,一般情况如果不超出C/C++基本数据类型的表达范围,这个问题及其容易,但是如果N的值十分的大,以致于超出基本数据类型表达范围
下面的程序正是解决2的N次方这个大数精确求解的源码
#include <iostream>
#include <vector>
#include <fstream>
using namespace std; int main()
{
int N = ;//2的N次方是超过基本数据类型所能表达的范围 vector<int> result;//使用vector来保存结果,这里可以使用char来保存
result.push_back();//首先起始为1
vector<int>::iterator it;//定义迭代器 for (int i = ; i <= N; i++)
{
for (it = result.begin(); it != result.end(); it++)//所得每一位*2
{
*it = (*it) * ;
}
for (size_t i = ; i < result.size(); i++)//判断每一位
{
if (result[i] > )//如果该为>=10
{
if (i == result.size() - )//如果是最高位
{
result.push_back(result[i] / );//增加一位
}
else
{
result[i + ] += result[i] / ;//进位
}
result[i] %= ;//进位之后本位处理
}
}
} //写入文件
ofstream out;
out.open("result.txt", ios::out | ios::trunc); if (!out.is_open())
{
cout << "open error";
return -;
}
for (int i = result.size() - ; i > -; i--)//存储和自然读数顺序相反
{
out << result[i];
cout << result[i];
} out.close();
cout << endl; system("pause");
return ;
}
程序运行结果:
2512=13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096
下面是win10计算器计算的结果:
-----------------------------------------------------------------------------------------------------------------------------------------------------------
这个程序只要稍加修改即可变成阶乘大数的求法
for (it = result.begin(); it != result.end(); it++)//所得每一位*2
{
*it = (*it) * 2;//将2修改为i---->*it = (*it) * i;
}
最新文章
- vuex复习方案
- 谈谈混合 App Web 资源的打包与增量更新
- 安装oracleASM
- VS2010/MFC编程入门之四(MFC应用程序框架分析)
- 【HDOJ】1114 Piggy-Bank
- Mvvm Light Toolkit for WPF/Silverlight系列之搭建mvvmlight开发框架
- Ajax 实现无刷新页面
- netty源码分析
- Sublime Text3使用Package Control 报错There Are No Packages Available For Installation
- Redis 基础、高级特性与性能调优
- Django _VIEW视图_源码分析
- ie 支持字体大小继承
- coursera国际法笔记 持续更新
- Redis Server installation FAQs
- 微信小程序接入百度统计
- Mybatis 学习笔记
- PHP运行时强制显示出错信息
- fieldset、legend、display html元素
- Spring MVC基本配置和实践(二)
- Linux:命令执行控制&;&;与||