码迷,mamicode.com
首页 > 其他好文 > 详细

UVa 10519 - !! Really Strange !!

时间:2015-05-17 16:50:54      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:

题目:一个举行内有n和圆,他们分别互相相交于不同的两个点,问他们把平面分成几部分。

分析:大整数,递推。F(n)= F(n-1)+ 2(n-1)。

            如果已经有n-1个圆,加入第n个,分别与前n-1个圆相交生成2(n-1)个交点,把圆分割成2(n-1)段弧;

            每段弧会把他所属的区域一分为二,F(n)= n(n-1)+ 2 { 其中,n ≥ 1 }。

说明:注意输入为0特殊处理。

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>

using namespace std;

char buf[202];
int  number1[202];
int  number2[202];
int  number3[202];

int main()
{
	while (~scanf("%s",buf)) {
		int l = strlen(buf);
		if (l == 1 && buf[0] == '0') {
			printf("1\n");
			continue;
		}
		
		memset(number1, 0, sizeof(number1));
		memset(number2, 0, sizeof(number2));
		memset(number3, 0, sizeof(number3));
		for (int i = 0; buf[i]; ++ i) {
			number1[l-1-i] = buf[i]-'0';
			number2[l-1-i] = buf[i]-'0';
		}
		
		number1[0] --;
		for (int i = 0; i < l; ++ i) 
			if (number1[i] < 0) {
				number1[i+1] --;
				number1[i] += 10;
			}
		
		for (int i = 0; i < l; ++ i)
		for (int j = 0; j < l; ++ j)
			number3[i+j] += number1[i]*number2[j];
		
		number3[0] += 2;
		for (int i = 0; i < 200; ++ i)
			if (number3[i] > 9) {
				number3[i+1] += number3[i]/10;
				number3[i] %= 10;
			}
			
		int end = 200;
		while (end > 0 && !number3[end]) -- end;
		
		while (end >= 0) printf("%d",number3[end --]);
		printf("\n");
	}
    return 0;
}


UVa 10519 - !! Really Strange !!

标签:

原文地址:http://blog.csdn.net/mobius_strip/article/details/45789047

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!