1~n 个数叠加求和

来源:互联网 发布:西北师大知行学院在哪 编辑:程序博客网 时间:2024/05/22 06:40



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


原创粉丝点击