科林明伦杯

H 直线

链接:https://ac.nowcoder.com/acm/contest/5758/H
来源:牛客网

题目描述

平面上存在n条直线。请问n条直线在平面上最多存在多少交点。

输入描述:

输入数据的第一行是t,表示数据的组数(t  < 100), 接下来每组数据输入一个n(1<=n <= 1e15)

输出描述:

对于每组输入样例,打印n条直线最多有多少个交点

输入

2
1
2

输出

0
1
#include<stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
 
char* MultipyBigNumber(char *s,char *p)
{
	int i,j,x,bit1,bit2;
	int len1 = strlen(s);
	int len2 = strlen(p);
	int len3 = len1 + len2;      /*  结果的位数最大应为两个长度相加  */
	char *arr;
 
	arr = (char*)malloc(sizeof(char)*(len3+1));  
	arr[len3] = '\0';
	arr = &arr[len3];
	len1--;
	len2--;
	i = x = 0;
 
	while(i < len3 - 1 || x != 0)
	{
		for(j = 0; j <= i; j++)
		{
			bit1 = len1 - i + j;   
			bit2 = len2 - j;         
			if(bit1 >= 0 && bit2 >= 0)  
				x += (s[bit1] - '0') * (p[bit2] - '0');
		}
		*(--arr) = x % 10 + '0';
		x /= 10;
                i++;
	}
        if(*arr++ == '0')       
		*arr = '\0';
	return --arr;
}
int main()
{
	int n;
	
	scanf("%d",&n);
	while(n--)
	{
		int flag=29;
		long long int k,m,ans;
		char kk[30],mm[30];
		scanf("%lld",&k);
		m=k-1;
		if ((k%2)==0)
		{
			k=k/2;
		}
		else
		{
			m=m/2;
		}
 

	    sprintf(kk, "%lld",k);
	    sprintf(mm, "%lld",m);
		puts(MultipyBigNumber(kk,mm));
		//itoa(k,kk,10);
		//itoa(m,mm,10);
		//ans=k*m; 
		//printf("%s\n%s",kk,mm);
	}
}

发表评论