当前位置: 首页 > news >正文

求 SN = 2 + 22 + 222 + 2222 + ... + 2...2(n个2)的程序

C语言求 SN = 2 + 22 + 222 + 2222 + … + 2…2(n个2)的程序

一、基础方法(逐项累加)

1. 非函数方式
#include<stdio.h>intmain(){intn,i,j;longlongsum=0,term=0;printf("请输入n的值: ");scanf("%d",&n);for(i=1;i<=n;i++){term=0;for(j=1;j<=i;j++){term=term*10+2;}sum+=term;}printf("SN = %lld\n",sum);return0;}
2. 函数方式
#include<stdio.h>longlongcalculateSN(intn){longlongsum=0,term=0;inti,j;for(inti=1;i<=n;i++){term=0;for(intj=1;j<=i;j++){term=term*10+2;}sum+=term;}returnsum;}intmain(){intn;printf("请输入n的值: ");scanf("%d",&n);printf("SN = %lld\n",calculateSN(n));return0;}

二、优化方法(递推公式)

1. 非函数方式
#include<stdio.h>intmain(){intn,i;longlongsum=0,term=0;printf("请输入n的值: ");scanf("%d",&n);for(i=1;i<=n;i++){term=term*10+2;sum+=term;}printf("SN = %lld\n",sum);return0;}
2. 函数方式
#include<stdio.h>longlongcalculateSN(intn){longlongsum=0,term=0;for(inti=1;i<=n;i++){term=term*10+2;sum+=term;}returnsum;}intmain(){intn;printf("请输入n的值: ");scanf("%d",&n);printf("SN = %lld\n",calculateSN(n));return0;}

三、递归方法

1. 递归求和
#include<stdio.h>longlonggetTerm(intn){if(n==1)return2;returngetTerm(n-1)*10+2;}longlongcalculateSN(intn){if(n==1)return2;returncalculateSN(n-1)+getTerm(n);}intmain(){intn;printf("请输入n的值: ");scanf("%d",&n);printf("SN = %lld\n",calculateSN(n));return0;}
2. 递归优化版
#include<stdio.h>voidcalculateSN(intn,longlong*sum,longlong*term){if(n==0)return;*term=*term*10+2;*sum+=*term;calculateSN(n-1,sum,term);}intmain(){intn;longlongsum=0,term=0;printf("请输入n的值: ");scanf("%d",&n);calculateSN(n,&sum,&term);printf("SN = %lld\n",sum);return0;}

四、数学公式方法

1. 等比数列公式
#include<stdio.h>#include<math.h>longlongcalculateSN(intn){inti;// SN = 2/9 * (10^n - 1) + 20/9 * (10^(n-1) - 1) + ... + 2n/9 * (10 - 1)// 简化后:SN = 2/81 * (10^(n+1) - 9n - 10)longlongpower=1;for(i=0;i<=n+1;i++){power*=10;}return(2*(power-9*n-10))/81;}intmain(){intn;printf("请输入n的值: ");scanf("%d",&n);printf("SN = %lld\n",calculateSN(n));return0;}
2. 递推公式优化
#include<stdio.h>longlongcalculateSN(intn){inti;longlongsum=0,term=0;for(i=1;i<=n;i++){term=term*10+2;sum+=term;}returnsum;}intmain(){intn,i;printf("请输入n的值: ");scanf("%d",&n);printf("各项为: ");longlongterm=0;for(i=1;i<=n;i++){term=term*10+2;printf("%lld ",term);}printf("\n");printf("SN = %lld\n",calculateSN(n));return0;}

五、不同实现风格

1. 数组存储方式
#include<stdio.h>intmain(){intn,i;longlongterms[100],sum=0;printf("请输入n的值: ");scanf("%d",&n);terms[0]=2;sum=terms[0];for(i=1;i<n;i++){terms[i]=terms[i-1]*10+2;sum+=terms[i];}printf("各项为: ");for(i=0;i<n;i++){printf("%lld ",terms[i]);}printf("\n");printf("SN = %lld\n",sum);return0;}
2. 指针方式
#include<stdio.h>voidcalculateSN(intn,longlong*sum){inti;longlongterm=0;for(i=1;i<=n;i++){term=term*10+2;*sum+=term;}}intmain(){intn;longlongsum=0;printf("请输入n的值: ");scanf("%d",&n);calculateSN(n,&sum);printf("SN = %lld\n",sum);return0;}
3. 宏定义方式
#include<stdio.h>#defineCALCULATE_SN(n)({\inti;longlongsum=0,term=0;\for(i=1;i<=(n);i++){\ term=term*10+2;\ sum+=term;\}\ sum;\})intmain(){intn;printf("请输入n的值: ");scanf("%d",&n);printf("SN = %lld\n",CALCULATE_SN(n));return0;}

六、完整测试程序(多种算法对比)

#include<stdio.h>// 方法1:双重循环longlongmethod1(intn){longlongsum=0,term=0;inti,j;for(i=1;i<=n;i++){term=0;for(j=1;j<=i;j++){term=term*10+2;}sum+=term;}returnsum;}// 方法2:递推公式longlongmethod2(intn){longlongsum=0,term=0;inti;for(i=1;i<=n;i++){term=term*10+2;sum+=term;}returnsum;}// 方法3:递归longlongmethod3(intn){if(n==0)return0;longlongterm=0;inti;for(i=1;i<=n;i++){term=term*10+2;}returnterm+method3(n-1);}intmain(){intn,i;printf("请输入n的值: ");scanf("%d",&n);printf("\n=== 不同算法结果 ===\n");printf("双重循环: SN = %lld\n",method1(n));printf("递推公式: SN = %lld\n",method2(n));printf("递归方法: SN = %lld\n",method3(n));// 显示各项printf("\n各项为: ");longlongterm=0;for(i=1;i<=n;i++){term=term*10+2;printf("%lld ",term);}printf("\n");return0;}

输入输出示例

输入

请输入n的值: 3

输出

SN = 246

解释:SN = 2 + 22 + 222 = 246

输入

请输入n的值: 5

输出

SN = 24690

解释:SN = 2 + 22 + 222 + 2222 + 22222 = 24690

算法复杂度对比

算法时间复杂度空间复杂度特点
双重循环O(n²)O(1)简单直观
递推公式O(n)O(1)高效实用
递归方法O(n²)O(n)递归栈
数学公式O(1)O(1)理论最优

推荐使用

递推公式方法是最推荐的实现方式:

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)
  • 代码简洁,易于理解
  • 性能优秀
http://www.jsqmd.com/news/676317/

相关文章:

  • 为什么你需要这个八大网盘直链下载助手?3个痛点彻底解决
  • 浙江大学毕业论文LaTeX模板:三步搞定专业论文排版的终极指南
  • 2026室内甲醛治理产品实测报告:四大核心技术对决,科学除醛全攻略 - 资讯焦点
  • 小型冷水机怎么选,深圳靠谱厂家东洋制冷值得推荐吗 - 工业推荐榜
  • 当你的投资组合遇上‘雷曼时刻’:用Python回测历史数据,聊聊资产配置的‘压舱石’是什么
  • Glide图片加载卡顿?可能是磁盘缓存策略没选对!详解DiskCacheStrategy.ALL/AUTOMATIC等参数实战选型
  • 从MPU6050到ICM20948:STM32项目升级指南与硬件软件避坑全记录
  • 免费激活Windows和Office的终极指南:KMS_VL_ALL_AIO智能脚本使用教程
  • N_m3u8DL-RE流媒体下载工具故障诊断与解决方案框架
  • 6家正规电脑装配线定制厂家实测,避坑指南来了 - 丁华林智能制造
  • 盘点广东铝单板灵活定制厂家,铝唐装饰材料性价比怎么样 - 工业品网
  • 黄金回收联系方式推荐:专业贵金属回收服务与价值重塑 - 资讯焦点
  • AI故障预警在线监控系统:让设备“会说话”,故障提前“早知道”
  • 告别apt和pip:为嵌入式ARM环境(如Ubuntu 18.04)定制专属PyQt5开发环境
  • 逆向破解百度搜索算法
  • 风口香薰智能联动新体验 欧信解决传统痛点 - 资讯焦点
  • Windows 11 LTSC安装微软商店终极指南:一键恢复完整应用生态
  • 树莓派LXDE桌面菜单栏丢了别慌!手把手教你新建panel.txt配置文件一键恢复
  • 2026年4月新消息:聚焦PC高要求应用,五大黑色母粒实力供应商深度解析与选型指南 - 2026年企业推荐榜
  • 别再只用plot了!Matlab双对数图loglog函数保姆级教程,从入门到精通
  • 3分钟搞定Beyond Compare 5授权激活:免费密钥生成终极指南
  • 2026食品铁盒定制工厂权威测评:华南实力品牌尚之美包装脱颖而出 - 速递信息
  • SYS/BIOS vs 裸机:在C6678上处理中断,哪种方式更适合你的项目?
  • 消防维保如何选?全周期专业保障体系解析 - 资讯焦点
  • 终极指南:5步快速掌握RVC语音克隆核心功能,10分钟打造专属AI歌手
  • 2026年信丰县回收镀金镀银公司排行榜/锡块回收,银锡膏回收,银锡渣回收,稀贵金属回收,回收铂钯铑稀贵金属 - 品牌策略师
  • 2026年家用智能锁公司推荐及选购参考/靠谱的家用智能锁工厂,比较好的家用智能锁公司,实力强的家用智能锁工厂 - 品牌策略师
  • EdgeRemover终极指南:如何彻底卸载Windows中的Microsoft Edge浏览器
  • 大模型架构新范式!NUS、复旦等发布首篇Latent Space系统综述
  • LRC Maker终极指南:5分钟从音乐小白到歌词制作专家