分析一下你會發現其實這題要求的就是"每個數字從右邊數過來第
一個不為0的數字的總合"
以p = 23, q = 34為例:
23從右邊數過來第一個不為0的數字為3
24為4
.....
.....
30為3
所求即為3+4+...+0+1+2+3+4
了解這個以後也許你心裡有個底了:暴力解
但這樣你會吃TLE,因為數字太大
你還需要有一個更關鍵的觀察:
S(p, q) = S(0, q) - S(0, p-1)
剩下的留給各位去思考
#include <stdio.h>
int main(void)
{
int i;
long long p, q, sum1, sum2;
while (scanf("%lld%lld", &p, &q) == 2 && (p >= 0 || q >= 0))
{
sum1 = sum2 = 0;
// 求S(0, p-1)
p--;
while (p > 0)
{
i = 0;
while (i != p%10)
{
i++;
sum1 += i;
}
sum1 = sum1 + 45*(p/10);
p /= 10;
}
// 求S(0, q)
while (q > 0)
{
i = 0;
while (i != q%10)
{
i++;
sum2 += i;
}
sum2 = sum2 + 45*(q/10);
q /= 10;
}
printf("%lld\n", sum2-sum1);
}
return 0;
}
沒有留言:
張貼留言