uva 10994 - Simple Addition(规律)

题目链接:uva 10994 - Simple Addition


题目大意:给出l和r,求∑(l≤i≤r)F(i), F(i)函数题目中有。


解题思路:由两边向中间缩进,然后l和r之间的数可以按照1~9划分(只会有这几种情况)。


 

#include <stdio.h>
#define ll long long
ll ans;

ll f(ll x) {
	if (x == 0)	return 0;
	else if (x % 10)
		return x % 10;
	else 
		return  f(x / 10);
}

void solve(ll l, ll r) {
	if (r - l < 9) {
		for (int i = l; i <= r; i++)
			ans += f(i);
		return;
	}
	
	while (l % 10) {
		ans += f(l);
		l++;
	}

	while (r % 10) {
		ans += f(r);
		r--;
	}
	ans += 45 * (r - l) / 10;
	solve(l / 10, r / 10);
}

int main () {
	ll l, r;
	while (scanf("%lld%lld", &l, &r), l >= 0 || r >= 0) {
		ans = 0;
		solve(l, r);
		printf("%lld\n", ans);
	}
	return 0;
}


 

 

posted @ 2013-10-31 20:55  pangbangb  阅读(545)  评论(0编辑  收藏  举报