42. 五年级小学生的题目
成绩 | 5 | 开启时间 | 2022年10月24日 星期一 08:00 |
折扣 | 0.8 | 折扣时间 | 2022年11月13日 星期日 23:55 |
允许迟交 | 否 | 关闭时间 | 2022年11月20日 星期日 23:55 |
那两个小朋友在不断进步,他们已经学会了负数和多位数,于是他们又开始进行游戏了。小明给出一堆整数和运算要求(+、-、*、/、%),小丽要找出这些整数中的最大值和最小值,然后按照小明的要求算出最大数与最小数进行算术运算的结果。
输入:
用逗号分隔的整数序列,及其运算符和等号
输出:
最大数 op 最小数=结果
说明:本题目应该可以不使用数组就可以完成,关键是如何处理负数和减法。计算结果为 int。
#include<stdio.h>
#include<string.h>
int pow(int a);
int result(int M, int m, char s);
int main(void)
{
int i = 0, j = 0, k = 0;
int len[10] = { 0 };//每个数的长度
int val[10] = { 0 };//每个数的数值
char num[10][10] = {0};//某数某位置的字符
int flag = 1;
scanf("%c", &num[0][0]);
while (flag)//想了好久的输入
{
while(num[k][i] != ',')
{
len[k]++;
i++;
scanf("%c", &num[k][i]);
}
k++;
i = 0;
scanf("%c", &num[k][0]);
if(num[k][0] == '=')
flag = 0;
}
for (i = 0; i < k - 1; i++)
{
if (num[i][0] != '-'){ //正数直接从第一个字符开始处理
for (j = 0; j < len[i]; j++)
{
val[i] += (num[i][j] - '0') * pow(len[i] - j - 1);
}
}
else{ //负数从第二个字符开始
for (j = 1; j < len[i]; j++)
{
val[i] += (num[i][j] - '0') * pow(len[i] - j - 1);
}
val[i] = -val[i];
}
}
int M = val[0], m = val[0];//找最大和最小
for (i = 1; i < k - 1; i++)
{
if (val[i] > M)
M = val[i];
if (val[i] < m)
m = val[i];
}
char s = num[k - 1][0];//运算符,由输入程序可知在num[k-1][0]的位置
if (M < 0)
printf("(%d) %c (%d) = %d\n", M, s, m, result(M, m, s));
else
{
if (m < 0)
printf("%d %c (%d) = %d\n", M, s, m, result(M, m, s));
else
printf("%d %c %d = %d\n", M, s, m, result(M, m, s));
}
return 0;
}
int result(int M, int m, char s)//计算函数
{
int r;
if (s == '+')r = M + m;
if (s == '-')r = M - m;
if (s == '*')r = M * m;
if (s == '/')r = M / m;
if (s == '%')r = M % m;
return r;
}
int pow(int a)//求10的a次方的函数(整型)
{
int i, r = 1;
for (i = 1; i <= a; i++)
{
r *= 10;
}
return r;
}