10.16 %u 和%i以及求最大公约数、最小公倍数

发布于 2024-10-16  232 次阅读


以后做题一般不会花太长时间写笔记,因为这个着实有些耗费时间

简略写几个小细节

1.当使用unsigned int 限制数据为正整数,请使用格式占位符%u

%i就更强了,它用于读取整数值。它可以自动识别输入的整数的进制(十进制、八进制或十六进制)

如果输入的数字以 0 开头,scanf 将其视为八进制;如果以 0x 或 0X 开头,则视为十六进制;否则,视为十进制

//%i具有通用性

2.关系运算符是==不是=

3.使用scanf函数请不要忘记&取地址运算符

4./=不要只写成/,不然数据自己不会被改变

5.尽量都新定义新的变量并将原变量值赋予该新的变量,一个步骤使用一个新的变量(别把变量又写成原来的了),避免原变量的值发生改变


我靠,我说为什么goto执行后出错了

m = n, n = m;

真nb,这他妈就相当于n的值给m,m的值给n,两个的值都成了n原来的值,根本不符合m>n这些条件,自然不会进入循环,不会输出对的结果了

你可以用一个变量去保留较小的数的原来值


欧几里得方法计算两个数的公约数

上一个除数就成了下一的被除数,上一个余数就成了下一个除数(辗转相除法)

重复这个过程,直到余数为0,此时除数和被除数中较小的数就是最大公约数(就是除数,最后的除数就是最大公约数)


LCM(a,b)=(a*b)/GCD(a,b)​

这就可以利用最大公因数计算最小公倍数


局部变量在函数或代码块(如循环或条件语句)内部定义的变量,只能在该函数或代码块内部使用。它们在函数或代码块结束时被销毁

就针对主函数里面,要想在循环或条件语句里面使用了还能在主函数其他位置使用,你必须把变量放在非循环/条件语句的外面先定义

同时,在循环/条件语句里面不能再进行定义,但是可以进行用它运算,运算完执行完循环/条件语句后它的值不会被销毁,而是保留

但如果你又在循环/条件语句中使用int等等定义,那么你定义的这个局部变量就会遮蔽(shadow)外部的该变量,最终还是会导致局部变量被销毁,该变量的值就会是你最初在外面定义的值


include

int main() {
char chain[200] = {0};
scanf("%s", chain); // 使用 scanf 读取字符串
int zimu = 0, figure = 0, kong = 0, other = 0;
int i = 0;

// 使用 strlen 来获取字符串的实际长度
while (chain[i] != '\0') { // 直到遇到字符串结束符
    if (chain[i] >= 'a' && chain[i] <= 'z') {
        zimu++;
    } else if (chain[i] >= '0' && chain[i] <= '9') { // 修正了这里的条件
        figure++;
    } else if (chain[i] == ' ') {
        kong++;
    } else {
        other++;
    }
    i++; // 移动到下一个字符
}

printf("%d,%d,%d,%d\n", zimu, figure, kong, other); // 输出结果
return 0;

}

ascii值是以十进制存储,可不代表1-9的数字就是’1-9‘,不能省略!

如果是输入,scanf中直接使用chain,不加[ ]

\0是字符串结束符,它用作结束判断条件再好不过

届ける言葉を今は育ててる
最后更新于 2024-11-05