hdu1041
#include <iostream>
#include <string>
using namespace std;
const int SIZE = 1001;
const int BASE = 10;
string result[SIZE];
string two("2");
void initial()
{
int mcarry, temp, carry;
int k;
string tempResult;
result[1] = "0";
result[2] = "1";
result[3] = "1";
result[4] = "3";
for (int i = 5; i < SIZE; ++i)
{
mcarry = 0;
for (int j = 0; j < two.length(); ++j) /*先做乘法,求出2^(n-3)*/
{
temp = 2 * (two[j] - '0') + mcarry;
mcarry = temp / BASE; /*乘法进位*/
temp = temp % BASE;
tempResult += (temp + '0');
}
if (mcarry != 0) /*进位不为0*/
{
tempResult += (mcarry + '0');
}
two = tempResult; /*存储计算结果*/
tempResult.clear();
int minLength = two.length() > result[i - 2].length() ? result[i - 2].length() : two.length();
carry = 0;
for (k = 0; k < minLength; ++k) /*然后做加法f(n) = f(n -2) + 2^(n - 3)*/
{
temp = (two[k] - '0') + (result[i - 2][k] - '0') + carry;
carry = temp / BASE; /*加法进位*/
temp = temp % BASE;
result[i] += (temp + '0');
}
/*两个数可能长短不一,所以要比较再相加*/
if (minLength < two.length())
{
for(; k < two.length(); k++)
{
temp = (two[k] - '0') + carry;
carry = temp / BASE;
temp = temp % BASE;
result[i] += (temp + '0');
}
}
if(minLength < result[i - 2].length())
{
for(; k < result[i - 2].length(); ++k)
{
temp = (result[i - 2][k] - '0') + carry;
carry = temp / BASE;
temp = temp % BASE;
result[i] += (temp + '0');
}
}
if (carry != 0) /*进位不为0*/
{
result[i] += (carry + '0');
}
tempResult.clear();
}
}
int main()
{
int n;
initial(); /*先打表*/
while (scanf ("%d", &n) != EOF)
{
for(int i = result[n].length(); i > 0; --i)
cout << result[n][i - 1]; /*这一步很关键,由于数据是倒着存的,所以要反着输出*/
cout << endl;
}
system ("pause");
return 0;
}
hdu1041的更多相关文章
- (大数)Computer Transformation hdu1041
Computer Transformation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...
- hdu-1041(大数模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1041 题意:电脑中存在数字1,进行扩展操作,如果遇到1变为“01”,如果遇到0,变为“10”,经过一次 ...
- ACM学习历程—HDU1041 Computer Transformation(递推 && 大数)
Description A sequence consisting of one digit, the number 1 is initially written into a computer. A ...
随机推荐
- PLSQL导入/导出数据方法
PLSQL导入/导出数据方法 PLSQL导入/导出数据方法 以前导数据库信息的时候,总是会先开启sql窗口,把自己手写的建表文件复制进去,然后再导入数据信息. 今天突然懒得去找以前的建表文件,而想用S ...
- Win7下Redmine2.0.3+Mysql55+Ruby1.8.7成功安装记录分享
准备软件: Ruby 下载网页: http://rubyforge.org/frs/?group_id=167&release_id=46836 http://files.rubyforge. ...
- ADFS 2.0 配置简介 PartⅢ – 声明规则语言
上一篇我们最终把 ADFS 与应用之间的信任关系建立起来了,但是应用接收到的声明信息只有默认的两个,这次我们就来学学怎么配置声明. 一.声明存储配置 ADFS 目前默认支持三种方式的声明值存储,另外还 ...
- MVC 5.1的遭遇:“已添加了具有相同键的项”
ASP.NET MVC 3升级至MVC 5.1的遭遇:“已添加了具有相同键的项” 最近将一个项目从ASP.NET MVC 3升级至刚刚发布的ASP.NET MVC 5.1,升级后发现一个ajax请 ...
- 使用Repository模式构建数据库访问层
使用Repository模式构建数据库访问层 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程[二]——使用Repository模式构建数据库访问层 系列导航地址http:// ...
- Moq 测试 属性,常用方法
RhinoMock入门(7)——Do,With和Record-playback 摘要: (一)Do(delegate)有时候在测试过程中只返回一个静态的值是不够的,在这种情况下,Do()方法可以用来在 ...
- 基于Redis的CustomerSessionProvider(一)
CustomerSessionProvider需要实现SessionStateStoreProviderBase 在设计Redis Session Provider的时候,需要考虑 1.是否每个用户的 ...
- struts2讲义----建立一个struts2工程
建立一个Struts2 工程 Ø 1在MyEclipse中新建web工程 Ø 2在struts-2.2.1.1-all\struts-2.2.1.1解压struts2-blank.war( 最基础的示 ...
- VB的写法,关于版本写入注册表
VB的写法,关于版本写入注册表 '软件都有一个关于我们的菜单,单单实现这个功能并不难,困难的是能够将这些信息写入注册表中,这样每次只要弹出这样的窗口,就从注册表里去搜索.这样是不是极大的节省了资源 ...
- 实现了一个简单的key-value存储系统
实现了一个简单的key-value存储系统 源码下载: kvfs.rar 正文: 所谓的Key-Value就是每次存储一个数据时,是根据Key进行索引存储的.为了实现Key的快速查找功能,我使用了B- ...