大家好,欢迎来到IT知识分享网。
首先a%b a,b两个数必须是整型(int ; short ; char ; long int ; long long)而不可以是浮点型(float ; double)
整除后的余数= 被除数 – 商*除数
取余的几个应用:
1. 判断能否整除某个数
2. 判别奇偶数,判别质数
3.计算范围,形成循环
4.求最大公约数:求最大公约数的最常用方法是欧几里得算法(辗转相除法)其计算原理依赖于定理gcd(a , b) = gcd (b , a mod b)
下面是几个题目帮助理解:
打印从0到99共100个数,要求每10个数换下一行打印
int main() { int n = 100; for (int i = 0; i < n; i++) { printf("%3d", i); //打印的宽度为3 if ((i + 1) % 10 == 0) //如果是i%10 == 0 的话,0就会被单独放在第一行,后面也就都乱了 { printf("\n"); } } printf("\n"); return 0; }
想一下为啥这样写打印的就是错的
int main() { int n = 100; for (int i = 0; i < n; i++) { if ((i + 1) % 10 == 0) { printf("\n"); } printf("%3d", i); } printf("\n"); return 0; }
但其实除了上面那样写,还有下面一种思路
int main() { int n = 100; for (int i = 1; i <= n; i++) { printf("%3d", i-1); if (i % 10 == 0) { printf("\n"); } } printf("\n"); return 0; }
第二个题:打印100中的所有偶数
int main() { int n = 100; for (int i = 1; i <= 100; i++) { if (i % 2 == 0) { printf("%4d", i); } } printf("\n"); return 0; }
另一种写法
int main() { int n = 100; for (int i = 2; i <= n; i += 2) { printf("%4d", i); } printf("\n"); return 0; }
如果要是打印奇数就把if 语句改一下,变成 if (i % 2 != 0) // != 代表的是不等于
第三个题:要打印第一行abcdefghijklmnopqrstuvwxyz
第二行bcdefghijklmnopqrstuvwxyza
直到最后一行zabcdefghijklmnopqrstuvwxy
代码思路:首先要打印26行26列,每一行有26个数组,数组是从0开始计算,所以最后一位是25,第一行从0位开始打印,打印26个数,第二行从第1位开始打印,就这样一直打印到最后一个数,再从第0位开始继续打印,就这样一直打印26行
int main() { char stra[] = { "abcdefghijklmnopqrstuvwxyz" }; //加分号 int n = 26; //第012345 ... 位 for (int i = 0; i < n; i++) { int k = i; for (int j = 0; j < n; j++) { printf("%c", stra[k]); //注意打印char 类型的为%c k += 1; //也可以写成k++等 if (k == n) { k = 0; } } printf("\n"); } printf("\n"); return 0; }
最后一个题目:求两数的最大公约数
解题思路1:首先定义两个变量a,b ;找到它们中间的最小值,可以用三目运算符c = a<b?a:b; (=的优先级只比,高,比? :三目运算符低,所以c是取a,b中最小的)
再a%c == 0&&b%c == 0 ; 直至c循环到1为止(1是任何数的公约数) &&是并且的意思
int main() { int a = 0, b = 0 ,c = 0; scanf("%d %d", &a, &b); c = a < b ? a : b; while(c > 1) //当c>1时进入循环 { if (a % c == 0&&b % c == 0) { break; //结束当前循环,可以在while,do{}while , for( ; ; )中使用 } c--; } printf("c = %d\n", c); return 0; }
另一种方法:辗转相除法 gcd(a , b) = gcd (b , a mod b) mod是取余的意思
int main() { int a = 0, b = 0, tmp = 0; scanf("%d %d", &a, &b); while (b != 0) { tmp = a % b; a = b; b = tmp; } printf("a = %d\n", a); return 0; }
最后,对于取余
如果%左边的操作数是正数,则取余的结果为正数或者0,如果%左边的操作数为负数,则取余的结果为负数或者0
如:
13%2 //余1
13% -2 //余1
-13%2 //余-1
-13%-2 //余-1
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/121248.html
