“第六十一天”

2023-11-06 00:12
文章标签 第六十一

本文主要是介绍“第六十一天”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 这三个也算一类的,减和加的处理差不多,不过这个题多了限制是被减数大于减数,要是想再完整一点,可以把小于的情况也考虑进去,不过这个我是如果被减数小于减数的话,我就用减数加被减数,然后最后打印的时候加个负号,就多了个if的判断语句。

这个我最开始是直接用double类型做的,因为是整数所以也不会有精度上的问题,运行也是对的,不过不是题的本意应该。

这个感觉应该是题希望的,不过这里有一点还是比较麻烦就是里面的那个for循环,实际上并不需要循环那么多次,但我没有想到这么确定结束循环的条件,可以想一下。

int main()
{int n = 0;int i = 0;scanf("%d", &n);int a[100] = { 0 };a[99] = 1;while (n--){int flag = 0;for (i = 99;i>=0; i--){int x = 2 * a[i] + flag;a[i] = x % 10;flag = x / 10;}}n = 0;while (a[n] == 0) n++;for (i = n; i < 100; i++)printf("%d", a[i]);return 0;
}

这个是double类型做的,

int main()
{int n = 0;scanf("%d", &n);int i = 0;double m = 1.;for (i = 0; i < n; i++){m *= 2.0;}printf("%.0lf", m);return 0;
}

这里是不能转换成整型再打印的,整型存不下(2的99次方需要99比特位),所以下面这个属于数据截断的结果。 

这个没有强制类型转换,但打印的时候会把浮点型的数据直接看成是整型,然后按整型2进制转换成10进制的方法打印出数据(浮点型和整型的存储方式不一样),所以这个就是错的,叫什么我也不知道。

 这个就是没有什么问题了,打印的其实就是浮点型,只不过一位小数都没有打印。

 这个题和求2的n次方没有什么区别,不过把每次乘以的2 变成了 i,不过我真绷不住的是,这个有些结果用10000位都存不下,我用的十万才存的下,不过应该也用不了这么多。

这是我的,改了点,但这个感觉应该运行速度不会和下面差太多,可是实际差的还蛮多的,不知道为什么。错误在把十万打成一万了,这样结果运行成功了,导致if的错误也没发现。

#include<string.h>int main()
{int n = 0;scanf("%d", &n);int len = 1;int a[100000] = { 0 };a[99999] = 1;for (int i = 1; i <= n; i++){int flag = 0;int j = 99999;for ( j = 99999; j>=10000-len; j--)//这里一开始是直接让j和0比较大小,控制循环的,也就是每次每个数组元素都要循环,{int x = a[j] * i + flag;a[j] = x % 10;flag = x / 10;}//这里是加的if (flag > 0){a[j] += flag;len++;}}n = 0;while (a[n] == 0) n++;for (int i = n; i < 100000; i++)printf("%d", a[i]);return 0;
}

 找到错误了,上面改的什么啊,这个比他的还要快,哈哈哈,上面那个改错了就,然后导致后面的错误也没有发现,就是那个if,后面用while了,注意我使用while循环为什么,是因为阶乘后,flag未必小于10,所以如果使用if的话,最后那个存储的不是个位数,如果n阶n太大,后面会崩掉,用while是把flag化成个位。

int main()
{int n = 0;scanf("%d", &n);int len = 1;int a[100000] = { 0 };a[99999] = 1;for (int i = 1; i <= n; i++){int flag = 0;int j = 99999;for (j = 99999; j >= 100000 - len; j--)//这里一开始是直接让j和0比较大小,控制循环的,也就是每次每个数组元素都要循环{int x = a[j] * i + flag;a[j] = x % 10;flag = x / 10;}//这里是加的while (flag > 0){a[j--] += flag%10;flag /= 10;len++;}}for (int i = 100000-len; i < 100000; i++)printf("%d", a[i]);return 0;
}

 这个是最开始的,可以看看为什么这个不会向上面那样崩掉

#include<stdio.h>
int main()
{int n = 0;scanf("%d", &n);int a[100000] = { 0 };a[99999] = 1;for (int i = 1; i <= n; i++){int flag = 0;for (int j = 99999; j >=0; j--){int x = a[j] * i + flag;a[j] = x % 10;flag = x / 10;}}n = 0;while (a[n] == 0) n++;for (int i = n; i < 100000; i++)printf("%d", a[i]);return 0;
}

这个是人家的,人家从低位开始算,算的时候记着长度,所以总循环次数比我少很多

#includeint main(){int n,i,j,k,len=1,a[100000]={0};//len长度一开始定为 1 scanf("%d",&n);a[1]=1;for(i=1;i<=n;i++)//要乘的数{for(j=1;j<=len;j++)//len表示有效数组的长度 {a[j]*=i;//先把每一位算出来再存 例如:a数组为12345  i=35时  a[j]*i即    1*35  2*35  3*35  4*35  5*35     a数组后来为 35 70 105   140  175} for(k=1;k<=len;k++)/*转为十进制存储  35进3余5  70+3=73 进7余3  105+7=112进11 余2 140+11=151进15 余1  175+15=190 进19 余0  a数组后来为  进制+余数 再求余,得到的余数就是a数组存储的十进制结果 。即   5    3    2   1   0*/     {if(a[k]>9)//需要进位的情况 {a[k+1]+=a[k]/10;a[k]%=10;if(a[k+1]!=0&&k==len){    len++;//最高位需要进位 }}}}for(i=len;i>=1;i--){printf("%d",a[i]);} return 0;}

这篇关于“第六十一天”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/353352

相关文章

第六十一题(找出数组中两个只出现一次的数字)

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。 请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 思路:先对所有数据进行异或得到结果result,两两相同的数据异或结果为0,因此result为两个只出现1次的数字异或的结果,求得result左边第一个值为1的位,根据异或的性质可知,这两个只出现一次的数字该位上的值肯定不同,一个为0,一个为1

hiho一下 第六十一周 题目1 : Combination Lock 线段树 成段更新

时间限制: 10000ms 单点时限: 1000ms 内存限制: 256MB 描述 Finally, you come to the interview room. You know that a Microsoft interviewer is in the room though the door is locked. There is a combinatio

代码随想录算法训练营第六十一天|739.每日温度、496.下一个更大元素I

代码随想录算法训练营第六十一天|739.每日温度、496.下一个更大元素I 739.每日温度 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1: 输入: temperatures = [73,74,75,71,

代码随想录算法训练营第六十一天|739. 每日温度、496.下一个更大元素 I

单调栈 文章目录 一、每日温度二、下一个更大元素 I总结 一、每日温度 1.暴力解法,双层循环 2.单调栈,递增排列,分三种情况。1.当前元素大于栈顶元素,得到结果,弹出并压入。2.当前元素小于等于栈顶元素,压入栈 class Solution {public:vector<int> dailyTemperatures(vector<int>& temperatu

学习java第六十一天

什么是控制反转(IOC)?什么是依赖注入(DI)? IoC(Inversion of Control) – 控制反转。它不是一种技术,而是一种思想。 IOC:就是对象之间的依赖关系由容器来创建,对象之间的关系本来是由我们开发者自己创建和维护的,在我们使用Spring框架后,对象之间的关系由容器来创建和维护,将开发者做的事让容器做,这就是控制反转。BeanFactory接口是Spring Ioc容器

代码随想录算法训练营第六十一天|739.每日温度、496.下一个更大元素Ⅰ

文档链接:https://programmercarl.com/ LeetCode739.每日温度 题目链接:https://leetcode.cn/problems/daily-temperatures/ 思路:第一次接触单调栈,通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。时间复杂度为O(n)。 单调栈: class

(学习日记)2024.05.07:UCOSIII第六十一节:User文件夹函数概览(uCOS-III->Source文件夹)第七部分

之前的章节都是针对某个或某些知识点进行的专项讲解,重点在功能和代码解释。 回到最初开始学μC/OS-III系统时,当时就定下了一个目标,不仅要读懂,还要读透,改造成更适合中国宝宝体质的使用方式。在学完野火的教程后,经过几经思考,最后决定自己锦上添花,再续上几章。 这几章想达成目的如下: 能够快速的上手能够控制系统的功能明白移植的过程能够根据需要的功能来裁剪源码 从第六十一章开始的章节都是熟

深入浅出CChart 每日一课——快乐高四第六十一课 飞梯十二重,CChart三维曲线图绘制

同学们好,今天继续介绍CChart本身的功能。接下来这几节课呢,笨笨老师准备对CChart的三维视图和场图功能进行详细一些的介绍。本节课首先介绍三维曲线图。 CChart软件库的开发,首先是从二维曲线图开始的,这一部分经过长时间的打磨,显示效果已经非常不错,功能也非常丰富。 对于三维曲线图,其实功能早就有了,本系列教程比较早期的课程,第十四课 三维视图,数学老师之从平面到空间,就已经展示了三维

代码随想录算法训练营第六十一天| 完结撒花

总结 两个月太快了,还记得是上水课时看微信正好看到代码随想录开营的文章推送,突发奇想就报了名,两个月下来收获满满,只后悔没有更早遇到 收获如下  完成了数组、链表、哈希表、字符串、栈和队列、二叉树、回溯、贪心算法、动态规划、单调栈十个模块的学习,对算法知识体系更清晰了养成了写博客的习惯,我之前会把笔记杂乱无章的放到本地的文件夹中,经过这次的训练营我开始将学到的知识发表到博客中,会更加易于查找

代碼隨想錄算法訓練營|第六十一天|503.下一个更大元素II、42. 接雨水。刷题心得(c++)

目录 讀題 503.下一个更大元素II 看完代码随想录之后的想法 42. 接雨水 看完代码随想录之后的想法 503.下一个更大元素II - 實作 思路 Code 42. 接雨水 - 實作 思路 原思路錯誤點 雙指針縱向運算思路 單調棧橫向運算思路 Code 原思路 - 錯誤 (縱向運算) 雙指針縱向運算思路 單調棧橫向運算思路 總結 自己实现过程中遇到哪些困难