求最小公倍数
思路:假设两个数,5和7,那么最小至少也要7吧,所以先假定最小公倍数是两个数之间较大的,然后看7能不能同时整除5和7,不能就加1继续除
int GetLCM(int _num1, int _num2)
{int max = _num1>_num2 ? _num1 : _num2;while (1){//证明能同时整除if (!(max%_num1) && !(max%_num2)) return max;else max++;}
}int main()
{//输入两个正整数int num1, num2;scanf("%d %d", &num1, &num2);printf("%d\n", GetLCM(num1, num2));return 0;
}
上面的方法效率太低需要优化
思路:a*i % b 看看能不能整除,能就a*i是最小公倍数,不能就i++
int main()
{//输入两个数int a, b;scanf("%d %d", &a, &b);//判断int i = 1;while (a*i % b) i++;printf("%d\n", a*i);return 0;
}
倒置字符串
思路:1. scanf这个函数它读到空格它就不读了,所以我们要这样写scanf("%[^\n]s"),它的意思是往后读一直读到\n。
2. 先把整个字符串倒置,再将每个单词倒置
void reverse(char* start, char* end)
{char tmp;while (start < end){tmp = *start;*start = *end;*end = tmp;start++;end--;}
}int main() {char arr[100];scanf("%[^\n]s", arr);int len = strlen(arr);char* start = arr;char* end = start + (len - 1);reverse(start, end); //倒置整个数组start = arr;end = arr;while (*end++){while (*end != ' ' && *end != '\0'){end++;}reverse(start, end - 1);start = end + 1;}printf("%s\n", arr);return 0;
}
解析:3和2都是整数,所以3/2等于1