Number.c,RUN
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//示范整数数字的技巧,只讨论非负整数的情况
//数字长度
int NumberLength(int n)
{
int len = 0;
while (n > 0)
{
len = len + 1;
n = n / 10;
}
return len;
}
//个位数
int UnitDigit(int n)
{
return (n % 10);
}
//十位数
int TensDigit(int n)
{
//等价于n除以10,再求个位数
return (n/10) % 10;
}
//从个位到十位、百位;顺序获取
void Digits(int n)
{
while (n > 0)
{
int digit = n % 10;
//printf("%d", digit);
n = n / 10;
}
}
//数字翻转,如数字1234,翻转成4321
int RevertNumber(int n)
{
int result = 0;
while (n > 0)
{
int digit = n % 10;
result = result * 10 + digit; //左移,数字加到个位
n = n / 10;
}
return result;
}
//最大公约数,穷举
int GCD_nomal(int a, int b)
{
int factor = (a < b) ? a : b;
for (; factor >= 1; factor--)
{
if (a % factor == 0 && b % factor == 0)return factor;
}
return 1;
}
//最大公约数,辗转相除。递归
int GCD_recursion(int a, int b)
{
if (a < b)return GCD_recursion(b, a); //变成a>=b的情况。和GCD_recursion(b, a % b)等价,可省略
//考虑a>=b的情况
if (a % b == 0) return b; //整除
return GCD_recursion(b, a % b); //不整除,递归
}
//最大公约数,辗转相除。非递归
int GCD_no_recursion(int a, int b)
{
int first=a, second=b;
if (a < b)//可省略
{
first = b;
second = a;
}
while (first % second != 0)
{
int temp = first;
first = second;
second = temp % second;
}
return second;
}
/*
A,B代表[0,9]之间的整数
AB = BA + 18
*/
void Game1()
{
for (int A = 0; A <= 9; A++)
{
for (int B = 0; B <= 9; B++)
{
int AB = 10 * A + B;
int BA = 10 * B + A;
if (AB == (BA + 18))
{
printf("%d%d = %d%d + 18\n", A, B, B, A);
}
}
}
}
//整数解,方程组和不等式
//已知6≤x≤30,15≤y≤36,编写程序求出满足方程2x+5y=126 的全部整数组解
void Game2()
{
for (int x = 6; x <= 30; x++)
{
for (int y = 6; y <= 30; y++)
{
if (2 * x + 5 * y == 126)
{
printf("<%d,%d>\n", x, y);
}
}
}
}
int main()
{
Game1();
Game2();
return 0 ;
int n = 12345678;
int len = NumberLength(n);
int revert = RevertNumber(n);
return 0;
}