这里我用到了数学高斯公式:sum = (首项+末项) * 项数 / 2;
#include <stdio.h>
#include <string.h>
void Cal(int a, int b)
{
int result[100],real[100];
memset(result, 0, sizeof(result));
memset(real, 0, sizeof(real));
int div_a = a / 9;
int last = a - div_a * 9;
int digit = 0, f, j;
result[0] = 1;
for(j = 0, f = 0; j <= digit || f > 0; j++)
{
int x = result[j] * b + f;
f = x / 10;
result[j] = x % 10;
}
while(result[j] == 0) j--;
digit = j; // 将 b 的值赋到result 中
int real_digit = digit;
for(int nn = digit; nn >= 0; nn--)
real[nn] = result[nn];
for(j = 0, f = 0; j <= digit || f > 0; j++)
{
int x = result[j] * 9 + f;
f = x / 10;
result[j] = x % 10;
}
while(result[j] == 0) j--;
digit = j; // 得到单个的值
for(j = 0, f = 0; j <= digit || f > 0; j++)
{
int x = result[j] * div_a + f;
f = x / 10;
result[j] = x % 10;
}
while(result[j] == 0) j--;
digit = j; // 乘以次数
digit = real_digit;
for(j = 0, f = 0; j <= digit || f > 0; j++)
{
int x = real[j] * last + f;
f = x / 10;
real[j] = x % 10;
}
while(real[j] == 0) j--;
digit = j; // 剩余的数
int jinwei = 0;
for(int mm = 0; mm < 100; mm++)
{
int x = real[mm] + result[mm] + jinwei;
jinwei = x / 10;
real[mm] = x % 10; // 最后相加
}
int i = 99;
while(real[i] == 0) i--; // 得到值的位数
for(j = i; j >= 0; j--)
printf("%d",real[j]);
printf("\n");
}
int main()
{
int a;
scanf("%d",&a);
Cal(a/2,a+1);
return 1;
}