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] = '#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);
}
}
';
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 = '#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);
}
}
';
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);
}
}