[解题报告] 《C语言入门100例》(第11例) 溢出

简介: [解题报告] 《C语言入门100例》(第11例) 溢出

零、写在前面


       这个系列不经常更新,今天这个题目又双叒叕觉得有点意思,我们一起看一看,主要知识点在


【第11题】给出四个数,输出四个数的和 | 溢出了怎么办?

https://blog.csdn.net/WhereIsHeroFrom/article/details/118237457


一、主要知识点


       1.溢出处理


       由于数据的量级只有,所以只有四个数字都是最大的时候才会产生溢出


#include <stdio.h>
typedef unsigned long long ull;                           //换名
const ull MAX = (((ull)1)<<62);                           //需要对1进行类型转换
int main() {
  int t;
  ull a, b, c, d;
  scanf("%d", &t);
  while (t--) {
  scanf("%llu %llu %llu %llu", &a, &b, &c, &d);     // 读入数据
  if (a == MAX && b == MAX && c == MAX && d == MAX) // 判断溢出条件
    printf("18446744073709551616\n");             // 溢出的值只能用字符串
  else
    printf("%llu\n", a + b + c + d);              // 非溢出直接返回
  }
  return 0;
}


       2.异或运算


       这个曾经写过 参考这里的知识点


[解题报告]《算法零基础100讲》(第16讲) 变量交换算法

https://blog.csdn.net/qq_17593855/article/details/121156818


二、课后习题


  476. 数字的补数


476. 数字的补数

https://leetcode-cn.com/problems/number-complement/

思考


扫描所有位取反就好了,利用上面的异或方法,一个数字对1取异或就可以得到这个数字的取反。

int findComplement(int num){
    for(int i = 0;num >> i;i++)//扫描所有位取反
        num = num ^ (1 << i);
    return num;
}


结果分析

image.png


凑合玩


7. 整数反转


7. 整数反转

https://leetcode-cn.com/problems/reverse-integer/


思考


按照要求进行返回就好了,但是在反转过程中要注意有没有超出限制,一开始都用负数处理,因为负数的表示范围大。


int reverse(int x){
    int ans = 0;bool flag = false;
    int min_int = -2147483648;
    if(x > 0){      //符号处理
        x = -x;
        flag = true;
    }
    for(int i = 0;x;++i){   //处理最终结果
        if(ans < min_int / 10) return 0;//溢出
        ans *= 10;
        if(ans < min_int - (x%10)) return 0;//溢出
        ans += (x%10);
        x /= 10;
    }
    if(flag && ans == min_int) return 0;
    if(flag)    ans = -ans;
    return ans;
}


结果分析

image.png

还行哈?


写在最后


这个系列确实是不怎么更新,今天这两道题需要注意的细节比较多,并且位运算比较有意思,所以还是建立一个合集,有需要的欢迎关注。


相关文章
|
12月前
|
安全 编译器 C语言
C++入门1——从C语言到C++的过渡
C++入门1——从C语言到C++的过渡
186 2
|
10月前
|
存储 NoSQL 编译器
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
指针是一个变量,它存储另一个变量的内存地址。换句话说,指针“指向”存储在内存中的某个数据。
307 7
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
|
9月前
|
存储 编译器 C语言
【C语言程序设计——入门】C语言入门与基础语法(头歌实践教学平台习题)【合集】
本文档介绍了C语言环境配置和编程任务,主要内容包括: - **C语言环境配置**:详细讲解了在Windows系统上配置C语言开发环境的步骤。 - **第1关:程序改错**:包含任务描述、相关知识(如头文件引用、基本语法规则)、编程要求、测试说明及通关代码。 - **第2关:scanf函数**:涉及`scanf`和`printf`函数的格式与使用方法,提供编程要求、测试说明及通关代码。 文档结构清晰,涵盖从环境搭建到具体编程任务的完整流程,适合初学者学习和实践。
177 4
|
9月前
|
C语言
【C语言程序设计——入门】基本数据类型与表达式(头歌实践教学平台习题)【合集】
这份文档详细介绍了编程任务的多个关卡,涵盖C语言的基础知识和应用。主要内容包括: 1. **目录**:列出所有关卡,如`print函数操作`、`转义字符使用`、`数的向上取整`等。 2. **各关卡的任务描述**:明确每关的具体编程任务,例如使用`printf`函数输出特定字符串、实现向上取整功能等。 3. **相关知识**:提供完成任务所需的背景知识,如格式化输出、算术运算符、关系运算符等。 4. **编程要求**:给出具体的代码编写提示。 5. **测试说明**:包含预期输入输出,帮助验证程序正确性。 6. 文档通过逐步引导学习者掌握C语言的基本语法和常用函数,适合初学者练习编程技能。
226 1
|
12月前
|
存储 Java 编译器
初识C语言1——C语言入门介绍
初识C语言1——C语言入门介绍
143 1
C语言------程设设计入门
这篇文章是C语言程序设计的入门教程,涵盖了C程序的实现过程、VC集成开发环境的使用、基本数据类型的使用、格式控制字符的作用,以及通过示例代码演示了如何使用printf()函数输出不同类型的数据。
C语言------程设设计入门
|
12月前
|
C语言
回溯入门题,数据所有排列方式(c语言)
回溯入门题,数据所有排列方式(c语言)
103 0
|
存储 Java C语言
【C语言入门】初识C语言:掌握编程的基石
【C语言入门】初识C语言:掌握编程的基石
151 4
【C语言入门】初识C语言:掌握编程的基石
|
NoSQL Java 编译器
C语言从入门到精通该怎样学?
持续学习与实践:编程是一门需要不断学习和实践的技能,要保持对新技术和新知识的敏感性,并持续进行编程实践。
189 1
|
存储 Java 程序员
【C语言入门】C语言入门:探索编程世界的基础概念
【C语言入门】C语言入门:探索编程世界的基础概念
273 2