直接上题目
Problem G: 求1+2+…+n=?
Description
给定一个n,求出s = 1+2+3+…+n的值。Input
输入只有一行,包含一个正整数n(n<=232)。Output
输出一行,为1+2+…+n的值。Sample Input
10
Sample Output
55
HINT
n的数据范围大,需注意数据类型的选择和计算次序,以避免数据溢出。
杰哥的WA86%码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
unsigned long long int a,ans;
scanf("%lld",&a);
if(a%2==0)
ans = a/2*(a+1);
if(a%2!=0)
ans = (a+1)/2*a;
printf("%lld",ans);
return 0;
}
杰哥的AC码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
unsigned long long int a,ans;
scanf("%llu",&a);
if(a%2==0)
ans = a/2*(a+1);
if(a%2!=0)
ans = (a+1)/2*a;
printf("%llu",ans);
return 0;
}
%lld和%llu差距为何这么大?
有空自己了解一下吧!!
下一题
Problem E: 字符的距离(III)
Description
定义两个字母之间的距离是它们之间的字母的个数。将26个英文字母排成一个环,那么两个字母之间的间距既可以按照顺时针计算,也可以按照逆时针计算。如:字母a和c之间,如果按照顺时针,它们的距离就是1;如果按照逆时针计算,距离是23。定义同一个字母的顺时针和逆时针距离均为0。
现在读取输入的两个英文字母,分别计算它们顺时针距离和逆时针距离。
Input
两个英文字母,中间用一个空格隔开。Output
两个字母的顺时针距离和逆时针距离,中间用一个空格隔开。Sample Input
a c
Sample Output
1 23
HINT
注意:输入的不一定都是小写字母!!!
WA75%码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
char a,b;
scanf("%c %c",&a,&b);
if(a==b)
printf("0 0");
else
{
if(a<'a')
a = a+32;
if(b<'a')
b = b+32;
printf("%d %d",b-a-1,25-(b-a));
}
return 0;
}
AC码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
char a,b;
scanf("%c %c",&a,&b);
if(a==b||a==b+32||a==b-32)
{
printf("0 0");
}
else
{
if(a<'a')
a = a+32;
if(b<'a')
b = b+32;
printf("%d %d",b-a-1,25-(b-a));
}
return 0;
}