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;}
- 1~n 个数叠加求和
- 5-1 N个数求和 (20分)
- 任意n个数求和
- N个数求和
- N个数求和
- N个数求和
- N个数求和
- N个数求和
- PAT N个数求和
- 1039: n个数求和
- 任意前n个数求和
- L1-009. N个数求和
- L1-009. N个数求和
- L1-009. N个数求和
- L1-009. N个数求和
- L1-009. N个数求和
- L1-009. N个数求和
- L1-009. N个数求和
- 鸟哥linux中对于文件系统的描述
- 20款流行前沿矢量图形素材
- XMLHttpRequest在请求失败(Origin null is not allowed by Access-Control-Allow-Origin.)
- 5 Easy Ways to Prepare Your Web Designs for Coding/五种方法让你的设计更好地编码
- 关于改掉JSP名称,无法找到文件的解决办法
- 1~n 个数叠加求和
- eclipse 日志查看
- linux find 命令详解
- C#,分页
- poj 1517 u Calculate e
- XML Parser
- 详解黑盒、白盒、灰盒测试
- linux目录跳转的好武器z.sh
- UVA 10599 Robots(II)(dp lis)