网站建设的公司哪家是上市公司,联享品牌网站建设,视频付费网站建设,流程图 网站四.找素数 素数#xff1a;除了1和它本身不再有其他因数的自然数。换句话说#xff1a;一个大于1的自然数 #xff0c;如果只能被1和它本身整除#xff0c;那就是素数#xff08;质数#xff09;。
在打印中遇到的问题就是#xff0c;知道怎么写却总是运行不起来。主要…四.找素数 素数除了1和它本身不再有其他因数的自然数。换句话说一个大于1的自然数 如果只能被1和它本身整除那就是素数质数。
在打印中遇到的问题就是知道怎么写却总是运行不起来。主要有这两个问题
1.每判断一个数是否是素数后都需要对flag进行初始化否则flag一直都是1。
2.打印素数需要在外层循环里面每判断一次就打印一次是素数则打印不是则不打印。
int main()
{int i 0;int j 0;int flag 0;//声明一个flagfor (i 100; i 200; i){flag 0;//每次判断素数后需要初始化for (j 2; j i; j){if (i % j 0){flag 1;//用1代表不是素数的自然数break;} }if (flag 0){printf(%d是素数\n, i);//0则代表的是素数}}return 0;
}五.最小公倍数以及最大公约数
最大公约数两个或多个整数共有的最大的那个正整数约数。例1218-36 基本办法穷举法找两个数小的那个然后依次减一其中判断i是否既能被m整除又能被n整除满足则最大公约数就i接着跳出循环。
int main()
{int m 0;int n 0;int i 0;scanf(%d %d, m, n);int min m n ? n : m;for (i min; i 1 ; i--){if (m % i 0 n % i 0){printf(%d是最大公约数\n, i);break;}}return 0;
} 辗转相除法 输入两个数m和nm对n求余。m%n如果等于0则最大公约数为n若不等于0将原先的n赋值给m求得的余数赋值给n再进行求余循环终止条件则是求余为0。
int main()
{int m 0;int n 0;int temp 0;int t 0;scanf(%d %d, m, n);while (m % n)//循环终止条件{temp m % n;m n;n temp;}printf(%d是最大公约数\n, n);return 0;
}
最小公倍数两个或多个整数的公倍数里最小的那一个。例1218-6 通过计算两个或多个数之积再除以它们的最大公约数辗转相除法计算求最小公倍数有很多种方法也可以通过找两个数或多个数最大的判断是否可以除尽其它数不能则直至找到能除尽的那个数。
int main()
{int a 0;int b 0;scanf(%d %d, a, b);int max a * b;int k 0;while (a % b)//辗转相除法{k a % b;a b;b k;}printf(%d\n, max / b);return 0;
}
六.字符串逆序 题目意思是最后打印的数组呈现出来的就是倒序的样子而非倒序打印。要倒序打印数组需要将第一个字符与最后一个字符交换交换时需要第三方第二个字符与倒数第二个字符交换两端一直向中间汇聚直到字符剩一个或两个。 从第一次函数来说吧先是w与!交换需要中间变量temp改变数组得用上指针指针找!需要知道字符串的长度*(stringlen-1)将!赋值给*string再将\0赋值给最后一个字符这里赋值的原因是为了调用下一次函数时计算剩下字符串的长度除w和!因为字符串结束标志是\0。假使不赋值\0计算长度时会多加!等到下次赋值时就是将!给e这样就得不到想要的倒叙。。递归重点来啦不断重复以上操作直至所剩的字符长度小于2假设为1的话最后这个字符不需要交换且没有字符与之交换这就成为这个题目递归的限制条件。最后再将temp的字符给*(stringlen-1)。这样就好啦 int Strlen(char *str)
{int count 0;while (*str!\0){count;str;}return count;
}void reverse_string(char* string)
{int len Strlen(string);char temp *string;//交换头和尾字符*string *(string len - 1);*(string len - 1) \0;//为了下一次递归头和尾相呼应if (Strlen(string 1) 2) //结束递归的条件向两端汇聚当只剩一个字符则不需要交换{reverse_string(string 1);//调用不需要指针*}*(string len - 1) temp;
}int main()
{char arr[] welcome to my world!!!;//int sz sizeof(arr) / sizeof(arr[0]);//int len strlen(arr);//printf(%d\n, sz);//23 写这个是为了测试sizeof和strlen计算字符串个数的区别//printf(%d\n, len);//22reverse_string(arr);printf(%s\n, arr);return 0;
}
这里再讲一个小知识sizeof计算字符时会计算\0而strlen函数不计算它。