[解题报告]【第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;
}


相关文章
|
4月前
|
C语言
教你快速理解学习C语言的循环与分支
教你快速理解学习C语言的循环与分支
27 0
|
6月前
|
编译器 C语言
C语言函数的学习
掌握函数的使用是学习C语言的关键一环,理解和应用这些基本的函数概念将使你能够更有效地利用C语言的强大功能。
35 0
|
8月前
|
存储 程序员 Go
|
8月前
|
存储 编译器 C语言
c语言学习历程【1】
c语言学习历程【1】
95 1
|
8月前
|
测试技术 C语言
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
65 1
|
8月前
|
C语言
|
8月前
|
C语言
|
8月前
|
C语言
|
8月前
|
C语言
|
8月前
|
C语言