“第六十一天”

news2024/11/27 21:45:54

 这三个也算一类的,减和加的处理差不多,不过这个题多了限制是被减数大于减数,要是想再完整一点,可以把小于的情况也考虑进去,不过这个我是如果被减数小于减数的话,我就用减数加被减数,然后最后打印的时候加个负号,就多了个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;
}

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

#include

int 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.coloradmin.cn/o/1175254.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM 各个参数详解

在一些规模稍大的应用中&#xff0c;Java虚拟机&#xff08;JVM&#xff09;的内存设置尤为重要&#xff0c;想在项目中取得好的效率&#xff0c;GC&#xff08;垃圾回收&#xff09;的设置是第一步。 PermGen space&#xff1a;全称是Permanent Generation space.就是说是永久…

ActiveMq学习⑤__ActiveMq的Broker

ActiveMq的Broker 是什么&#xff1f; 相当于一个ActiveMq的服务器实例 Broker其实就是实现了用代码的形式启动ActiveMQ将MQ嵌入到Java 代码中&#xff0c;以便随时用随时启动&#xff0c;在用的时候再去启动这样节省了资源&#xff0c;也保证了可靠性。 按照不同的配置文件…

线程的创建、等待、退出

多线程开发在Linux平台上已经有成熟的pthread库支持&#xff0c;所以使用pthread库在编译时要加上-pthread。其设计的多线程开发的基本概念主要包含3点&#xff1a;线程、互斥锁、条件。其中线程操作又分线程的创建、退出、等待三种。互斥锁包含4种操作&#xff0c;分别是创建、…

线程同步——互斥量解锁、解锁

类似与进程间通信信号量的加锁解锁。 对互斥量进行加锁后&#xff0c;任何其他试图在此对互斥量加锁的线程都会被阻塞&#xff0c;直到当前线程释放该互斥锁。如果释放互斥锁时有多个线程被阻塞&#xff0c;所有在该互斥锁上的阻塞线程都会变成可运行状态&#xff0c;第一个变…

《算计》

第一章&#xff1a;机器的诞生 在一个科技高度发达的未来世界&#xff0c;人类社会已经进入了自主机器时代。人们创造出了一种名为“超级自主机器&#xff08;Super Autonomous Machine&#xff0c;简称SAM&#xff09;”的全新型机器&#xff0c;它拥有无限的智慧和学习能力&a…

LeetCode.6 N字形变换

一开始想的是真的创建一个数组 去按照题目所给的要求填入数据 最后输出不为空的数组项 但是不仅时间复杂度高 而且错误频繁出现 最终也没有提交成功 查阅题解后发现数组并不重要 假设我们忽略掉数组中的那些空白项 最终输出的结果就是numRows行的字符串的拼接 string conver…

基于Matlab的yolo算法行人检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 # 基于Matlab编写的Yolo算法行人检测系统介绍 基于Matlab编写的Yolo算法行人检测系统是一种用于自动检测图像或视频…

SAP中接口与集成

从进化的角度看SAP中接口和集成的十个概念 - 知乎 SAP比较常用的几个接口方式及比较-SAP技术站 1. 文件接口 基于文件交换的接口是从SAP向第三方系统提供数据的最古老的技术之一。将文本或excel文件推送到特定目录或从应用程序服务器中提取&#xff1b;两种方式都有效。在没有…

[云原生2. ] Kubernetes的简单介绍

文章目录 1. Kubernetes 概述1.1 简介1.2 作用1.3 Kubernetes 的特点1.4 Kubernetes 主要功能 2. Kubernetes 集群架构与组件2.1 Master 组件2.1.1 Kube-apiserver2.1.2 Kube-controller-manager2.1.3 Kube-scheduler 2.2 配置存储中心2.2.1 etcd 2.3. Node 组件2.3.1 Kubelet2…

51单片机-定时计数器

文章目录 前言1 原理2.编程 前言 1 原理 2.编程 定时计算&#xff1a; 50ms501000us 一个机器周期&#xff1a;1.085us 65535 - 501000/1.08546082 故 40082*1.08549998.97 /*定时器1&#xff0c;定时模式 工作模式1 16位计数器&#xff0c; 定时20秒后使能蜂鸣器*/ #include…

MP4视频文件损坏怎么修复?

3-2 作为摄影师&#xff0c;或者在平时有拍摄工作的事情的&#xff0c;比如搞婚庆、搞航拍什么的&#xff0c;有一定的概率会遇到损坏的视频文件&#xff0c;比如相机突然断电、无人机炸机等&#xff0c;有可能会导致保存的MP4文件损坏。 这种文件使用播放器播放的话&#xf…

2023数学建模国赛C题赛后总结

今天国赛的成绩终于出来了&#xff0c;盼星星盼月亮的。之前面试的时候已经把我给推到国奖评委那里去了&#xff0c;可是好可惜&#xff0c;最终以很微小的劣势错失国二。只拿到了广西区的省一。我心里还是很遗憾的&#xff0c;我真的为此准备了很久&#xff0c;虽然当中也有着…

海康Visionmaster-全局脚本:通信设备 ID 获取方法

全局脚本中通信数据接收函数中的 DeviceID 是按照设备管理列表中至上而下、从 0 开始依此增 1&#xff0c;现在这种方法行不通. 每次增加设备列表都会分配唯一的 ID 号&#xff0c;后续全局脚本中判断设备 ID 通过这个唯一 ID 识别&#xff0c;不再从上到下默认排序。

Docker数据管理、网络与Cgroup资源限制

目录 一、Docker的数据管理 1、数据卷 2、数据卷容器 3、端口映射 4、容器互联 二、Docker网络 2.1Docker网络实现原理 2.2Docker 的网络模式 3.3网络模式详解&#xff1a; host模式 container模式 none模式 bridge模式 自定义网络 创建自定义网络 三、Cgroup资源…

【Mybatis小白从0到90%精讲】12:Mybatis删除 delete, 推荐使用主键删除!

文章目录 前言XML映射文件方式推荐使用主键删除注解方式工具类前言 在实际开发中,我们经常需要删除数据库中的数据,MyBatis可以使用XML映射文件或注解来编写删除(delete)语句,下面是两种方法的示例。 XML映射文件方式 Mapper: int delete(int id);Mapper.xml:

基于SSM的社区智慧养老监护管理平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

私有化部署大模型:5个.Net开源项目

从零构建.Net前后端分离项目 今天一起盘点下&#xff0c;10月份推荐的5个.Net开源项目&#xff08;点击标题查看详情&#xff09;。 1、BootstrapBlazor企业级组件库&#xff1a;前端开发的革新之路 BootstrapBlazor是一个用于构建现代Web应用程序的开源框架&#xff0c;它基…

C++笔记之表驱动法

C笔记之表驱动法 code review! 文章目录 C笔记之表驱动法0.数组小技巧1.std::map实现2.结构体实现3.数组和结构体结合实现表驱动法-存储函数指针4.表驱动法概念-ChatGPT5. 直接访问表&#xff08;Direct Access Table&#xff09;的示例6. 索引访问表&#xff08;Indexed Acc…

什么情况造成互斥锁死锁

由于互斥锁的使用不当&#xff0c;导致多个线程无法进行下一步的代码运行&#xff0c;也就是说竞争锁的两个线程互相锁住&#xff0c;导致整个进程无法往下运行。 举个例子&#xff1a; 两个锁&#xff0c;两个线程&#xff0c;两个线程运行的条件都是需要同时获得这两把锁&a…

Canvas 梦幻树生长动画

canvas可以制作出非常炫酷的动画&#xff0c;以下是一个梦幻树的示例。 效果图 源代码 <!DOCTYPE> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <title>梦幻数生长动画</title&…