//1. 输入一个四位整数,首先判断其是否是四位,若否,则要求继续输入;
//若是则判断其千位和个位相加是否小于10,并输出yes(no).如果输入0,则退出程序。
int n;
scanf("%d", &n);
int a = n / 1000;
if (a>0&&a<10)
{
int num[4];
for (int i = 0; i < 4; i++)
{
num[i] = n % 10;
n /= 10;
}
if (num[0]+num[3]<10)
{
printf("yes");
}
else
{
printf("no");
}
}
else
{
printf("重新输入");
}
//2. 输入2 个正整数m 和n(1 <= m, n <= 1000) ,输出m 到n 之间的所有满足各位数字的立方和等于它本身的数。
int m;
int n;
scanf("%d,%d", &m, &n);
for (int i = m; i < n; i++)
{
int count = 1;
int temp1 = i;
int temp2 = i;
do
{
temp1 /= 10;
count++;
} while (temp1>10);//求一共有多少位,便于后面动态分配数组内存
int* p = (int*)malloc(sizeof(int)*count);
for (int j = 0; j < count; j++)
{
p[j] = temp2 % 10;
temp2 /= 10;
}//把每一位值放入数组
int sum = 0;
for (int j = 0; j < count; j++)
{
sum += pow(p[j], 3);
}
if (sum == i)
{
printf("%d\n", i);
}
}
//3. 已知XYZ + YZZ = 532,其中X,Y和Z为数字,编一程序求出X,Y和Z。
for (int X = 1; X < 10; X++)
{
for (int Y = 1; Y < 10; Y++)
{
for (int Z = 0; Z < 10; Z++)
{
int sum = 100 * X + 10 * Y + Z + 100 * Y + 10 * Z + Z;
if ( sum == 532)
{
printf("%d,%d,%d\n", X, Y, Z);
}
}
}
}
/*4. 输入两个正整数m和n,求其最大公约数(辗转相除法)
用较大数除以较小数,再用出现的余数(第一余数)去除除数,
再用出现的余数(第二余数)去除第一余数,
如此反复,直到最后余数是0为止。
如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数*/
int m;
int n;
scanf("%d,%d", &m, &n);
if (m>n)
{
int temp=m;
m = n;
n = temp;
}//使m小,n大
int temp1, temp2;
do
{
temp1 = m%n;
temp2 = n;//
m = temp2;//m变为n,即除数变为原被除数
n = temp1;//现在的被除数是余数
} while (n!=0);
printf("%d,%d", n, m);