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

devtools/2024/11/20 12:30:22/

蓝桥杯题目:求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/devtools/135472.html

相关文章

Unity脚本基础规则

Unity脚本基础规则 如何在Unity中创建一个脚本文件&#xff1f; 在Project窗口中的Assets目录下&#xff0c;选择合适的文件夹&#xff0c;右键&#xff0c;选择第一个Create&#xff0c;在新出现的一栏中选择C# Script&#xff0c;此时文件夹内会出现C#脚本图标&#xff0c;…

浅谈Java之简单算法

Java 是一种广泛使用的编程语言&#xff0c;它拥有许多简单而有效的算法。以下是一些基础的Java算法示例&#xff1a; 1. 冒泡排序 冒泡排序是一种简单的排序算法&#xff0c;它重复地遍历待排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交…

单片机学习笔记 6. 数码管动态显示

更多单片机学习笔记&#xff1a;单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示 目录 0、实现的功能 1、Keil工程 1-1 数码管动态显示 1-2 数组的定义与引用…

性能优化(二):ANR

介绍 ANR全称Application Not Responding&#xff0c;意思就是程序未响应。如果一个应用无法响应用户的输入&#xff0c;系统就会弹出一个ANR对话框&#xff0c;用户可以自行选择继续等待亦或者是停止当前程序。 Android系统会监控程序的响应状况&#xff0c;一旦出现下面情况…

Nginx: 实现Websocket代理

概述 Nginx 代理模式中&#xff0c;大多都是基于 HTTP 的 Proxy 模块来对应设置的除此之外&#xff0c;Nginx 还可以实现更多细小化的协议的HTTP代理&#xff0c;比如 ws 的代理 WS 的建立模式 websocket 它其实是建立在HTTP连接上&#xff0c;先要建立起HTTP连接 建立好连接…

Vim 命令、操作、文件操作示例

1.常用命令 编辑 以下命令在命令模式执行 i&#xff0c;a&#xff0c;r&#xff1a;在光标的前&#xff0c;后&#xff0c;上方插入字符命令(iinsert,aappend,rreplace) O&#xff0c;o&#xff1a;在当前行前面&#xff0c;后面插入一空行 cw&#xff0c;dw&#xff1a;改…

利用代理IP爬取Zillow房产数据

引言 最近数据分析的热度在编程社区不断攀升&#xff0c;有很多小伙伴都开始学习或从事数据采集相关的工作。然而&#xff0c;网站数据已经成为网站的核心资产&#xff0c;许多网站都会设置一系列很复杂的防范措施&#xff0c;阻止外部人员随意采集其数据。为了解决这个问题&am…

excel打开csv文件乱码的问题

如图所示&#xff0c;在保存csv文件时已指定编码为utf-8&#xff0c;用excel打开后仍然乱码 解决方法&#xff1a; 在保存csv文件时指定编码为utf-8-sig 该编码方式会在文件开头加入一个 BOM&#xff08;Byte Order Mark&#xff09;&#xff0c;有助于 Excel 正确识别 UTF-8…