题目:直线
来源:“科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛)
解题思路
题目: 条直线在平面上最多存在多少交点。
最多交点个数为 。
因为 ,所以交点个数可能会大于
,所以交点个数使用字符串表示。
addStr 函数实现两个表示十进制数的字符串相加的功能。
两数相乘使用竖式计算。注意:乘以高位数字时,在字符串后面补零。
C++代码
#include<iostream>
using namespace std;
string addStr(string& s1, string& s2){
string ans = "";
int i = s1.length() - 1;
int j = s2.length() - 1;
int flag = 0;
while(i >= 0 && j >= 0){
int a = s1[i] - '0';
int b = s2[j] - '0';
int c = a + b + flag;
flag = c / 10;
c %= 10;
ans = to_string(c) + ans;
--i;
--j;
}
while(i >= 0){
int a = s1[i] - '0';
int c = a + flag;
flag = c / 10;
c %= 10;
ans = to_string(c) + ans;
--i;
}
while(j >= 0){
int a = s2[j] - '0';
int c = a + flag;
flag = c / 10;
c %= 10;
ans = to_string(c) + ans;
--j;
}
if(flag)
ans = "1" + ans;
return ans;
}
int main(){
int t;
cin >> t;
while(t){
unsigned long long n;
cin >> n;
unsigned long long a = n;
unsigned long long b = n - 1;
if(a % 2 == 0)
a /= 2;
else
b /= 2;
string ans = "";
string s = to_string(b);
int zero = 0;
for(int i=s.length()-1; i>=0; --i){
int k = s[i] - '0';
string str = to_string(a * k);
string sz(zero, '0');
str += sz;
ans = addStr(ans, str);
++zero;
}
//unsigned long long ans = n * (n-1) / 2;
cout << ans << endl;
--t;
}
return 0;
}
京公网安备 11010502036488号