湖南科技大学2018年C语言程序设计实验题——问题 F: 红包数
时间限制: 1 Sec 内存限制: 128 MB
题目描述
如果某个整数的个位为x, 则将表达式x-4的值定义为该整数对应的“红包数”,请将给定整数区间内所有整数对应的“红包数”累加求和,得到一个红包总数并
输出
好好算,这个红包总数可能就是你春节可能收到的红包总数哟!
谨以此愿景提前祝大家春节快乐!
输入
输入2个int类型整数m和n(-1000000000<=m<=n<=1000000000),m与n之间由空格隔开。
输出
将区间[m,n]内所有整数对应的“红包数”累加求和,得到一个红包总数并输出。
样例输入
0 18
样例输出
5
提示
新年福利,温馨提示: 如果用暴力方法最多只能过80%的数据,此时提交反馈结果可能会显示”答案错误20%“或”时间超限20%“。在OI排名表中可以看出得8分。没有优化思路的,得8分后请立刻转做其它题。 如果想过另外20%的数据,请优化方法。
解决代码
#include<stdio.h>
int main()
{
long long he = 0;
long long i, j = 0, a, n;
long long b1 = 0, b2, b = 0;
long long bp = 0;
long long cd = 0;
scanf("%lld %lld", &a, &b);
cd = b - a + 1;
if (a >= 0 && b >= 0)
{
n = b - a;
he = (n / 10) * 45;
for (i = 1; i <= n % 10 + 1; i++)
{
he = he + b % 10;
b = b - 1;
}
he = he - 4 * cd;
}
else if (a < 0 && b >= 0)
{
/*小于0部分*/
n = -a;
he = n / 10 * (45);
for (i = 1; i <= n % 10 + 1; i++)
{
bp = bp + a % 10;
a = a + 1;
}
he = he - bp;
/*大于0部分*/
n = b;
he = he + (n / 10) * 45;
for (i = 1; i <= n % 10 + 1; i++)
{
he = he + b % 10;
b = b - 1;
}
he = he - 4 * cd;
}
else if (a < 0 && b <= 0)
{
n = b - a;
he = (n / 10) * (-45);
for (i = 1; i <= n % 10 + 1; i++)
{
he = he + a % 10;
a = a + 1;
}
he = -he;
he = he - 4 * cd;
}
printf("%lld\n", he);
return 0;
}