C语言计算2的1024次方

2023-09-21 12:02:29

C语言计算2的1024次方

迅雷有这么一道笔试题,编程计算2的1024次方。

所谓2的1024次方,就是有1024个2相乘,于是有些同学顺手就能写出代码:

int main()
{
    int reslut = 1;
    for (int i = 0; i < 1024; i++)
    {
        result *= 2;
    }
    printf("%d\n", result);
    return 0;
}

如果你也这样写代码,那简历上顶多能写了解C语言,离掌握和精通还差很远。

C语言中的int类型一般占4字节,4个字节就是32位二进制,即使是无符号数,能表示的最大数字也就是2的32次方减一,离2的1024次方还差很远。

所以单纯的用整数来保存结果肯定不行。

一种办法是当作字符串来处理,模拟乘2进位的方法。
来一个数组,数组尽量大一些,初始化成1,乘以2的结果分别是2 4 8。

在这里插入图片描述

再乘以2的时候,结果是6并且向后进一位。

在这里插入图片描述
再乘以2的时候,结果是6并且向后进一位。

在这里插入图片描述
最终得到的字符串来个逆序就行。

这种办法不仅能计算2的1024次方,再大一些,问题也不大。

代码直接贴上,需要的话可以暂停下看看。

#include <stdio.h>
#include <string.h>

void reverse(char *r) 
{
    int length = strlen(r);
    int i;
    char ch; 
    for (i = 0; i < length / 2; i++)
    {   
        ch = r[i];
        r[i] = r[length - 1 - i]; 
        r[length - 1 - i] = ch; 
    }   
}

void NPowerOfTwo(int n, char *res)
{
    int i, length, j, num, carry;
    for (i = 0; i < n; i++)
    {
        carry = 0;
        for (j = 0; j < strlen(res); j++)
        {
            num = res[j] - '0';
            num = (num << 1) + carry;
            carry = num / 10;
            res[j] = num % 10 + '0';
        }   
        if (carry > 0)
            res[j] = carry + '0';
    }       

    reverse(res);
}   

int main( )
{
    int n;
    char result[2048] = {'1'};

    NPowerOfTwo(1024, result);

    printf("%s\n", result);

    return 0;
}

在牛客的排行榜上,速度最快,占用空间最小的并不是这种解法。

int类型虽然不好表示这么大的数,但是C语言中还有一种long double类型,具体的长度不同的编译器可能略有不同,10字节、12字节、16字节都有。我用的Ubuntu环境,long double类型确实能解决2的1024次方。

int main()
{
    long double reslut = 1.0;
    for (int i = 0; i < 1024; i++)
    {
        result *= 2.0;
    }
    printf("%.0Lf\n", result);
    return 0;
}
更多推荐

vue3将页面导出成PDF文件(完美解决图片、表格内容分割问题)

vue3将页面导出成PDF文件(完美解决图片、表格内容分割问题)1、安装依赖2、在utils中创建htmlToPDF.js文件3、在vue中引入并使用1、安装依赖npminstall--savehtml2canvas//页面转图片npminstalljspdf--save//图片转pdf2、在utils中创建htmlT

Java 中将多个 PDF 文件合并为一个 PDF

一.前言我们将从以下两个方面向您展示如何将多个PDF文件合并为一个PDF:1.将文件中的多个PDF合并为单个PDF2.将流中的多个PDF合并为单个PDF1.了解Spire.PDF库要在Java中合并PDF文件,我们将使用Spire.PDF库。Spire.PDFforJava是一个PDFAPI,使Java应用程序能够在不

电子时钟制作(瑞萨RA)(6)----配置RTC时钟及显示时间

概述本文将详细讲解如何借助e2studio来对瑞萨微控制器进行实时时钟(RTC)的设置和配置,以便实现日历功能和一秒钟产生的中断,从而通过串口输出实时数据。实时时钟(RTC)模块是一种时间管理外设,主要用于记录和控制日期和时间。与常见的微控制器(MCU)中的定时器不同,RTC时钟提供了两种计时方式:日期模式和计时模式。

基于RASC的keil电子时钟制作(瑞萨RA)(7)----配置RTC时钟及显示时间

基于RASC的keil电子时钟制作7_配置RTC时钟及显示时间概述硬件准备视频教程RTC配置RTC属性配置设定时间设定周期性中断设定日历闹钟时间回调函数演示效果数码管显示日期主程序概述本文将详细讲解如何借助e2studio来对瑞萨微控制器进行实时时钟(RTC)的设置和配置,以便实现日历功能和一秒钟产生的中断,从而通过串

Adobe Bridge 2024:解锁创意力的数字媒体利器

在当今数字化的时代,创意工作者们需要处理和管理大量的数字媒体资源,如照片、视频、音频等。为了提高工作效率和创作质量,他们需要一个功能强大、易于使用的工具来组织、浏览和共享这些媒体文件。幸运的是,AdobeBridge2024正好满足了这些需求,并成为让创意力得以解锁的数字媒体利器。首先,AdobeBridge2024提

金融贷款行业实时高精准获客 ——三网运营商大数据

都说生产是第一因素,但对于任何企业来说,客户来源才是第一因素。在大多数行业,获得客户的困难已经成为行业的挑战。如今,许多行业和企业获得客户的主要来源是在线促销和客户获取。现在几乎每个人都有一部手机。运营商可以根据移动客户的访问行为、通信行为、浏览行为和其他功能来探索他们的需求。运营大数据拥有海量的用户数据,包括众多领域

C++:初始化列表,static成员,友元,内部类

个人主页:个人主页个人专栏:《数据结构》《C语言》《C++》文章目录前言一、初始化列表二、static成员三、友元四、内部类总结前言本篇博客作为C++:初始化列表,static成员,友元,内部类的知识总结。一、初始化列表初始化列表:以冒号开始,接着是一个以逗号分隔的数据成员列表,每个“成员变量”后面跟一个放在括号中的初

STM32 CAN使用记录:bxCAN基础通讯

文章目录目的关键配置与代码轮询方式中断方式收发测试示例链接总结目的CAN是非常常用的一种数据总线,被广泛用在各种车辆系统中。这篇文章将对STM32中CAN的使用做个示例。CAN的一些基础介绍可以参考下面文章:《CAN基础概念》https://blog.csdn.net/Naisu_kun/article/details

第五章 数据库完整性

第五章数据库完整性数据库的完整性指数据的正确性和相容性正确性指数据是符合现实世界语义,反映了当前实际状况的相容性指数据库同一对象在不同关系表中的数据是符合逻辑的防止数据库中存在不符合语义的数据,也就是防止数据库存在不正确的数据防范对象不合语义的,不正确的数据数据的安全性保护数据库防止恶意的破坏和非法的存取防范对象非法用

动态负荷对电力系统摆幅曲线的影响研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳️座右铭:行百里者,半于九十。📋📋📋本文目录如下:🎁🎁🎁目录💥1概述📚2运行结果🎉3参考文献🌈4Matlab代码实现💥1概述摆动曲线仿真是评估扰动后电力系统稳定性的重要工具。

Hbase分布式集群部署

目录一、环境说明二、部署Hbase2.1解压Hbase2.2移动解压包2.3修改hbase-env.sh文件2.4修改环境变量2.5修改hbase-site.xml文件2.6修改regionservers文件2.7分发hbase2.7.1分发hbase包2.7.2分发环境配置2.8启动hbase服务2.8.1环境生效2

热文推荐