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


    本文是通过例子学习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实现求和,发现其异同之处;
    • 通过字符数组,高精度运算;
      加油,我相信你可以写的出来的!
    所有文章,坚持原创。如有转载,敬请标注出处。
  • 相关阅读:
    How to Install Tomcat
    使用Application_Error捕获站点错误并写日志
    安装 SQL Server2008 安装程序规则支持提示“重新启动计算机”失败
    历史执行Sql语句性能分析 CPU资源占用时间分析
    返回List的分页方法
    @@IDENTITY与SCOPE_IDENTITY()
    Debugging Failed Because Integrated Windows Authentication Is Not Enabled
    一般经验总结
    dom中实现全选复选框的实例。
    dom中表格的修改 增加行例
  • 原文地址:https://www.cnblogs.com/siweihz/p/12194119.html
Copyright © 2020-2023  润新知