[解题报告]【第01题】A + B | 基础输入输出,开启学习C语言打卡的序章

简介: [解题报告]【第01题】A + B | 基础输入输出,开启学习C语言打卡的序章

全文目录

 🎁主要知识点

           📓简单输入输出

           📓循环的使用

           📓输入的判定之EOF

           📓输入的判定2

           📓Leetcode的书写方式

 📓课后习题

            371. 两整数之和

            面试题 08.05. 递归乘法

 📑写在最后

🎁主要知识点

📓简单输入输出

#include <stdio.h>            // 标准输入输出
int main() {                  // 主函数 第一个运行的函数
    int a, b;                 // 声明两个整形变量
    scanf("%d %d", &a, &b);   // 读入两个变量
    printf("%d\n", a + b);    // 输出值
    return 0;                 // 正常结束的标志
}



📓循环的使用

#include <stdio.h>
int main() {
    int a, b, t;
    scanf("%d", &t);             // 标准输入
    while (t--) {                // 循环输入
        scanf("%d %d", &a, &b);
        printf("%d\n", a + b); 
    }
    return 0;
}


📓输入的判定之EOF

这个主要适用于OJ 因为OJ是利用文件去输入输出的,在文件结束的时候会右一个结束符,当读到这个东西的时候scanf会返回EOF。以此判断是否输入结束。

群里非常多人问我调试怎么输入这个,在win下按ctrl+z 然后回车就能达到测试的目的。


#include <stdio.h>
int main() {
    int a, b;
    while(scanf("%d %d", &a, &b) != EOF) {
        printf("%d\n", a + b);
    }
    return 0;
}


📓输入的判定2

与上面的区别是有特别要求,a和b不同时为0


#include <stdio.h>
int main() {
    int a, b;
    while (scanf("%d %d", &a, &b) && (a || b) ) {  // 读到数字且两者不同时为0
        printf("%d\n", a + b); 
    }
    return 0;
}


📓Leetcode的书写方式

Leetcode的判定方式和自己调试是完全不同的。

Leetcode更重视思路,所以需要写的只有接口函数(不需要头文件和main函数)

所谓接口函数就是我给你传基础数据,你给我我想要的结果


int add(int a, int b) { //传入两个数字
    return a + b;  //返回我要的a+b
}


📓课后习题

371. 两整数之和

371. 两整数之和


给你两个整数a 和b ,不使用 运算符+和- ,计算并返回两整数之和。


解题思路1


这个其实就是上面说的熟悉一下力扣的使用方式。请忽略它说的不能用xxx。这只是第一天,别给自己加戏。


int add(int a, int b) { //传入两个数字
    return a + b;  //返回我要的a+b
}


解题思路2


这个方法是我花了一段时间后回来看才出来的方式。不建议第一天的小白查看!!!

从二进制的角度来看,两个数字的加和当前位的值有关系。半加器就是两个数的异或结果。比如1 + 0 = 1、1 + 1 = 0、0 + 0 = 0、0 + 1 = 1。然后进位就是两个位都是1的时候会产生进位。两个数的和其实就是进位+加完的值。直到进位为0。

有兴趣的同学可以了解一下


int getSum(int a, int b){
    while(b){
        unsigned temp = ((unsigned)a&(unsigned)b) << 1;//进位
        a = a ^ b;  //当前位结果
        b = temp; //进入下一轮 变成 进位+ 值
    }
    return a;
}


面试题 08.05. 递归乘法

面试题 08.05. 递归乘法


递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。

解题思路1


这个同样不要理这些要求。


int add(int a, int b) { //传入两个数字
    return a * b;  //返回我要的a+b
}


解题思路2


这个是我回头只会给的一个思路 模拟手算乘法。


int multiply(int a, int b){
    int sum = 0;
    for(int i = 0;a >> i;i++)
        if((a >> i) & 1)    sum += b << i;//如果这位有数字 就加b的左移i位
    return sum;
}


相关文章
|
6天前
|
存储 编译器 C语言
初识C语言——详细入门(系统性学习day4)
初识C语言——详细入门(系统性学习day4)
|
6天前
|
C语言
C语言对文件的输入输出
C语言对文件的输入输出
18 0
|
6天前
|
编译器 程序员 开发工具
c语言从入门到实战——在系统学习C语言之前所需要了解的知识
C语言是一种通用的、过程式的计算机编程语言,支持结构化编程、词汇变量作用域和递归等功能,其设计提供了低级别的存取权限,并且要求程序员管理所有的内存细节。C语言的基本构成包括数据类型(如整型、浮点型、字符型等)、运算符(如算术运算符、关系运算符、逻辑运算符等)、控制结构(如顺序结构、选择结构、循环结构等)以及函数等。此外,C语言还提供了指针的概念,这是其他许多编程语言所不具备的。指针是一个变量,其值为另一个变量的地址,通过指针可以间接访问和操作内存中的数据。C语言也支持数组、结构体、联合体等复合数据类型,以及文件操作、动态内存分配等高级功能。
54 0
|
6天前
|
存储 C语言
通俗易懂的学习C语言中输入一组数并找出其最大值
通俗易懂的学习C语言中输入一组数并找出其最大值
|
6天前
|
C语言 C++ 数据格式
【C++对于C语言的扩充】C++与C语言的联系,命名空间、C++中的输入输出以及缺省参数
【C++对于C语言的扩充】C++与C语言的联系,命名空间、C++中的输入输出以及缺省参数
|
6天前
|
人工智能 测试技术 C语言
C语言学习
C语言学习
15 1
|
6天前
|
机器学习/深度学习 人工智能 Java
学习Python语言好还是C语言好
学习Python语言好还是C语言好
22 0
|
6天前
|
C语言
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
86 0
|
6天前
|
C语言
二次学习C语言补缺(day1)
二次学习C语言补缺(day1)
18 2
|
6天前
|
编译器 C语言
C语言指针学习
C语言指针学习
19 0