经过例子进阶学习C++(五)计算2的1次方至2的64次方之和

本文是经过例子学习C++的第五篇,经过这个例子能够快速入门c++相关的语法。html

1.上篇回顾

在上一篇中,咱们经过字符数组计算2<sup>64</sup>次方:ios

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

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

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;从而实现累加求和的通用形式。spa

程序运行效果以下图:code

3.计算2<sup>1</sup>+2<sup>2</sup>+2<sup>3</sup>+2<sup>4</sup>+...+2<sup>64</sup>=?

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

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

同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实现求和,发现其异同之处;
  • 经过字符数组,高精度运算; 加油,我相信你能够写的出来的!

原文出处:https://www.cnblogs.com/siweihz/p/12194119.html

相关文章
相关标签/搜索