这里我用到了数学高斯公式: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; }