湖南科技大学2018年C语言程序设计实验题——问题 L: 个位求和【增强版】
题目描述
将一个整数区间内所有整数的个位相加并输出。
输入
输入2个int类型整数m和n(m<=n),m与n之间由空格隔开。
输出
将区间[m,n]内所有整数的个位相加并输出。
样例输入
1 18
样例输出
81
提示
新年福利,温馨提示:
1)如果用int类型数据,暴力方法只能过90%的数据。最终可能会显示”答案错误10%“或”时间超限10%“。在OI排名表中可以看出得9分。没有优化思路的,得9分后请立刻转做其它题。
2)如果想过另外10%的数据,请优化方法,且注意如果变量或运算的数据超过int最大值(2147483647),请采用long long定义变量, 变量的scanf和printf 请使用%lld作为格式说明符。
#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;
scanf("%lld %lld", &a, &b);
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;
}
}
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;
}
}
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;
}
printf("%lld\n", he);
return 0;
}