前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

hdu1041

作者头像
@坤的
发布2018-06-04 11:05:04
3070
发布2018-06-04 11:05:04
举报
文章被收录于专栏:*坤的Blog*坤的Blog

#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; }

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-01-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档