本文是通过例子学习C++的第五篇,通过这个例子可以快速入门c++相关的语法。

1.上篇回顾

在上一篇中,我们通过字符数组计算264次方:

通过例子进阶学习C++(四)计算2的64次方

带着这个问题:为什么用字符数组,不用整数数组,开始本文。

2.先计算1+2+3+...100的和并总结规律

本题目直接实现,有点复杂,我们先计算1+2+3+...100的和,总结规律后再来计算。

这个是一个经典的循环问题,可以用for、while、do-while求和。

#include<iostream>
using namespace std; int main(){
int sum = 0;
for(int i=1;i<=100;i++){
sum += i;
}
cout<<"for求1+2+3+...+100之和是:"<<sum<<endl; sum = 0;
int t = 1;
while(t<=100){
sum += t;
t ++;
}
cout<<"while求1+2+3+...+100之和是:"<<sum<<endl; sum = 0;
t = 1;
do{
sum += t;
t ++;
}while(t<=100); cout<<"do-while求1+2+3+...+100之和是:"<<sum<<endl; return 0;
}

比较for、while和do-while的实现,我们发现累加求和的通用规则是在循环体中sum += t;从而实现累加求和的通用形式。

程序运行效果如下图:

3.计算21+22+23+24+...+264=?

该问题可以归为“算法”中的一类,称之为高精度计算。

当需要计算的两个数非常大,用字符数组存储,本文中分别用数组n计算2的次方,用sum数组存储和。

同2中的方法,求数组n和数组sum的和,只需要对应位求和即可。其中涉及的进位规则位,此处数组a,b,c均为整数数组:

c[i]=a[i]+b[i];
if (c[i]>=10) { c[i]%=10; ++c[i+1]; }

实现代码如下:

#include<iostream>
using namespace std; int main(){
char n[32],sum[32];
int a,b,jin=0,temp=0; //初始化数组
n[0] = '1';
for(int i=1;i<32;i++){
n[i] = '0';
} //初始化求和数组
for(int i=0;i<32;i++){
sum[i] = '0';
} //循环64次,每次数组的值乘以2
for(int j=0;j<64;j++){
jin = 0;
//从最低位开始,计算乘以2后各个位上的值:`当前值*2+进位`,然后转换为字符
for(int i=0;i<32;i++){
a = (n[i]-'0') * 2;
n[i] = a%10 + jin + '0';
jin = a/10;
} //求和
jin = 0;
for(int k=0;k<32;k++){
temp = sum[k] - '0' + n[k] - '0' + jin;
sum[k] = temp % 10 + '0'; if(temp>=10){
jin = temp /10;
}else{
jin = 0;
}
}
} cout<<"2的1次方+2的2次方+...2的64次方的和是:";
for(int i=31;i>=0;i--){
cout<<sum[i];
} return 0;
}

程序运行后效果如下:

4.总结

上述实现方法远非最优,通过该例子,可以学习:

  • 数组定义、初始化、使用;
  • 通过for、while、do-while实现求和,发现其异同之处;
  • 通过字符数组,高精度运算;

    加油,我相信你可以写的出来的!

通过例子进阶学习C++(五)计算2的1次方至2的64次方之和的更多相关文章

  1. 通过例子进阶学习C++(七)CMake项目通过模板库实现约瑟夫环

    本文是通过例子学习C++的第七篇,通过这个例子可以快速入门c++相关的语法. 1.问题描述 回顾一下约瑟夫环问题:n 个人围坐在一个圆桌周围,现在从第 s 个人开始报数,数到第 m 个人,让他出局:然 ...

  2. 通过例子进阶学习C++(四)计算2的64次方,不服写写看

    ​ 本文是通过例子学习C++的第四篇,通过这个例子可以快速入门c++相关的语法. 1.乍一看题目非常简单,简单思考一下,可以通过for循环实现: #include <iostream> u ...

  3. 通过例子进阶学习C++(六)你真的能写出约瑟夫环么

    本文是通过例子学习C++的第六篇,通过这个例子可以快速入门c++相关的语法. 1.问题描述 n 个人围坐在一个圆桌周围,现在从第 s 个人开始报数,数到第 m 个人,让他出局:然后从出局的下一个人重新 ...

  4. ruby -- 进阶学习(五)使用Ckeditor插件上传中文图片

    基于rails4.0环境 当使用Ckeditor上传中文命名图片时报错,解决方法是对图片进行重命名 在Ckeditor插件的安装目录下找到controllers/.../application.rb ...

  5. MYSQL进阶学习笔记五:MySQL函数的创建!(视频序号:进阶_13)

    知识点六:MySQL函数的创建(13) 内置函数: 自定义函数: 首先查看是否已经开启了创建函数的功能: SHOW VARIABLES LIKE ‘%fun%’; 如果变量的值是OFF,那么需要开启 ...

  6. Libevent学习笔记(五) 根据例子学习bufferevent

    libevent中提供了一个Hello-world.c 的例子,从这个例子可以学习libevent是如何使用bufferevent的. 这个例子在Sample中 这个例子之前讲解过,这次主要看下buf ...

  7. C#可扩展编程之MEF学习笔记(五):MEF高级进阶

    好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...

  8. 文本分类学习 (五) 机器学习SVM的前奏-特征提取(卡方检验续集)

    前言: 上一篇比较详细的介绍了卡方检验和卡方分布.这篇我们就实际操刀,找到一些训练集,正所谓纸上得来终觉浅,绝知此事要躬行.然而我在躬行的时候,发现了卡方检验对于文本分类来说应该把公式再变形一般,那样 ...

  9. PostgreSQL学习手册(五) 函数和操作符

    PostgreSQL学习手册(五) 函数和操作符 一.逻辑操作符:    常用的逻辑操作符有:AND.OR和NOT.其语义与其它编程语言中的逻辑操作符完全相同. 二.比较操作符:    下面是Post ...

随机推荐

  1. 怎样判断一个jquery对象是否为空jquery对象

    if ( $('#myDiv').length ){} http://stackoverflow.com/questions/47... 也可以直接判断$('#myDiv')[0]===undefin ...

  2. SQL2008 R2安装完成后开启services服务指引和 sa账号启用、数据类型

  3. 【React】富文本编辑器 清空文本内容 获取HTML

    富文本编辑器  React  传入 import React,{Component } from 'react'; import { Card, Button, Table, Form, Select ...

  4. jquery的offset().top和js的offsetTop的区别,以及jquery的offset().top的实现方法

    jquery的offset().top和js的offsetTop的区别,以及jquery的offset().top的实现方法 offset().top是JQ的方法,需要引入JQ才能使用,它获取的是你绑 ...

  5. JavaScript实现版本号比较

    /* * JavaScript实现版本号比较 * 传入两个字符串,当前版本号:curV:比较版本号:reqV * 调用方法举例:Version('5.12.3','5.12.2'),将返回true * ...

  6. jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站(二)

    引言:首先我们可以实现一键部署网站,但在实际生产环境网站部署完成之后,我们的开发隔三差五要修改下网站的内容,难道都要我们运维手动执行命令吗?没有一种方法使得开发人员修改完代码自己测试,部署上线呢,那这 ...

  7. UE4 C++ 代码编译方式

    Unreal 有一个非常酷的特性 —> 不必关闭编辑器就可以编译 C++ 更改! 有两种方法可以达到这个目的: 1.直接点击编辑器主工具栏中的 编译(Compile) 按钮. 2.在编辑器继续运 ...

  8. vagrant在windows下的安装和配置(一)

    记录一下安装和配置过程中的一些坑步骤一分别下载vagrant和VirtualBox,我这里下载的是vagrant_1.9.1.msi 和 VirtualBox-5.1.14-112924-Win.ex ...

  9. Vijos1788 第K大 [模拟]

    1.题意:给定N个数字,和一个值K,要求输出一组数据中第K大的数字,其中30%的测试点满足:n <= 100;60%的测试点满足:n <= 1000;100%的测试点满足:n <= ...

  10. Python学习(二)语言基础

    一.变量与类型 在程序设计中,变量是一种存储数据的载体 整型:Python中可以处理任意大小的整数 浮点型:浮点数也就是小数 字符串型:字符串是以单引号或双引号括起来的任意文本 布尔型:布尔值只有Tr ...