蓝桥杯某例题的解决方案和拓展(完全能解决例题本身)

server/2024/11/20 6:33:44/

蓝桥杯题目:求1(包含)直到20230408(包含)所有自然数的加和。


这个题比较恶心的一点在于,20230408本身没有超过int的上限,但是它的加和是超过int上限的,因此如果直接用int来计算,就会变成负数,算错结果。

当然,一个最简单的方法,或许就是设定一个long long类型的变量,比如long long sum,用sum来存放这个结果。这样由于long long的上限比int要大,就可以解决这个问题。然而这个方法有个明显的缺点,在于long long类型实际上也是有边界的,而且边界也比int大不了多少,只要你放入的数字足够大,你就总有可能破除上限,导致类似先前的问题。

因此我采用了一种灵感来源于“科学计数法”的方法,即,我把这个输入的数字做拆分,把它每一位的数字都分开存储到数组里面,这样我只需要进行数组对应位置的加减然后检查其是否需要进位就可以了。

下面我们展示完整的代码,我这次仍然给他加了注释,用了递归和指针:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//求1(含)到20230408(含)中每个数的和
//204 6347 1403 8436       65566
//204 6347 1403 8436
int spreadFun(int a,int b,int* c, int arr_rec[]) {  if (a / 10 > 10) {arr_rec[b]=spreadFun(a / 10,b+1,c, arr_rec);*c = *c + 1;return a % 10;}else {arr_rec[0] = a/10;*c = *c + 1;return a % 10;}
}int main()
{int input =1 ; int arr_each[25] = { 0 }; int arr_sum[25] = { 0 };  int cont = 0; int chan = 0;int whAt = 0;int* pcount = &cont;printf("请输入你要计算的大数");scanf("%d", &whAt);while (input<20230409) {//这部分成功将每一位分离//scanf("%d", &input);int count = 1; int t = 0;arr_each[cont]=spreadFun(input, count, pcount, arr_each);chan = arr_each[cont];arr_each[cont] = arr_each[0];arr_each[0] = chan;//这部分成功将每一位分离while (t <= cont) {arr_sum[24 - t] += arr_each[t];//存到sum后侧以方便进位t++;}//此时t=contt = 0;//下面用于检查是否某一位大于10并进位while (t <= cont) {if (arr_sum[24 - t] >= 10) {arr_sum[23 - t] += (arr_sum[24 - t] / 10);arr_sum[24 - t] = (arr_sum[24 - t] % 10);}t++;}if (input == whAt) {for (t = 0; t <= 24; t++) {printf("%d", arr_sum[t]);}printf("\n");}cont = 0; input++;}return 0;
}

这就是我完整的代码了,欢迎检验,这个代码我给他做了修改,现在你不仅仅可以用于求这个蓝桥杯的题,也可以用于求任何大数的加和,前提是,它的加和不要超过24,如果你需要更大的数字,你可以修改数组的大小,这样也可以达到你的目的。


http://www.ppmy.cn/server/143404.html

相关文章

11.9.2024刷华为

文章目录 HJ31 单词倒排HJ32 密码提取语法知识记录 傻逼OD题目又不全又要收费&#xff0c;看毛线&#xff0c;莫名奇妙 HW这叼机构别搁这儿害人得不得&#xff1f; 我觉得我刷完原来的题目 过一遍华为机考的ED卷出处&#xff0c;就行了 HJ31 单词倒排 游戏本做过了好像 HJ3…

聚焦 AUTO TECH 2025华南展:探索新能源汽车发展新趋势

随着“新四化”浪潮的推进&#xff0c;汽车行业正经历前所未有的变革。中国新能源汽车正逐渐走向世界。国内汽车制造巨头如比亚迪、吉利、奇瑞、长安等&#xff0c;已经将出口提升至核心战略地位。中国新能源汽车的发展&#xff0c;不仅推动了全球汽车产业的电动化转型&#xf…

Iperf是什么?

Iperf 是一个网络性能测试工具。Iperf可以测试最大TCP和UDP带宽性能&#xff0c;具有多种参数和UDP特性&#xff0c;可以根据需要调整&#xff0c;可以报告带宽、延迟抖动和数据包丢失。 iperf 分为两种版本&#xff0c;unix/linux版和windows版&#xff0c;unix/linux版更新比…

C/C++ 知识点:extern 关键字

文章目录 一、extern 关键字1、什么是extern&#xff1f;2、基本用法2.1、声明全局变量2.2、声明函数2.3、使const变量具备外部连接性 3、extern "C"特殊用途3.1、C调用C3.2、C调用C 4、注意事项5、总结 前言&#xff1a; 在C和C编程语言中&#xff0c;extern关键字扮…

【计算机体系架构】 MESI缓冲一致性

高并发学习参考 https://blog.csdn.net/MrYushiwen/article/details/123049838 https://cloud.tencent.com/developer/article/2197857 ESI 是指Cache 行的三种一致性状态&#xff1a;E&#xff08;Exclusive&#xff0c;独占&#xff09;&#xff0c;S&#xff08;Shared&…

ClickHouse的介绍、安装、数据类型

1、介绍和安装 1.1、简介 ClickHouse是俄罗斯的Yandex于2016年开源的列式存储数据库&#xff08;DBMS&#xff09;&#xff0c;使用C语言编写&#xff0c;主要用于在线分析处理查询&#xff08;OLAP&#xff09;&#xff0c;能够使用SQL查询实时生成分析数据报告。 OLAP&…

TKinter实现与Dash应用的同步启停控制

使用Python集成Tkinter和Dash&#xff1a;创建交互式数据可视化应用 在数据可视化项目中&#xff0c;我们经常需要结合传统GUI和现代Web可视化框架的优势。本文将介绍如何整合Tkinter和Dash&#xff0c;创建一个既有桌面应用界面&#xff0c;又能展示交互式图表的应用程序。 …

Linux登录指令last详解

引言 在Linux系统中&#xff0c;了解用户登录记录是系统管理和安全审计的重要任务之一。last指令作为Linux系统中用于检索和展示用户登录信息的工具&#xff0c;扮演着至关重要的角色。本文将详细介绍last指令的定义、架构、原理、企业应用以及常见的命令体系&#xff0c;帮助…