C语言:给定整数n和m,满足n能被2m整除。对于一串连续递增整数数列1,2,3,4…,每隔m个符号翻转一次,最初符号为‘-’

例如n=8,m=2,数列就是-1,-2,3,4,-5,-6,7,8
而n=4,m=1,数列就是-1,2,-3,4
现在让你算算前n项和为多少

C语言解决:

#include<stdio.h>
int main()
{
    
    	
	int n,m;
	int sum=0;
	int flag=-1;
	scanf("%d %d",&n,&m);
	assert(n%(2*m)==0);
	for(int i=1;i<=n;i++)
	{
    
    
		sum+=i*flag;
		if(i%m==0)
		{
    
    
			flag=-flag;
		}
	}
	printf("%d",sum);
	return 0;
}

但是这样的效率还不够好,所以我们可以采用数学办法.

并且因为数据过大int型会越界,所以将int型改为了无符号的长长整形

C语言代码如下:

#include<stdio.h>
 
 int main()
 {
    
    
 	unsigned long long n,m;
 	scanf("%lld %lld",n,m);
 	assert(n%(2*m)==0)
 	printf("%lld",m*(n/2));

	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_32100603/article/details/115918243