經過例子進階學習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

相關文章
相關標籤/搜索