Time Limit: 10 second
Memory Limit: 2 MB
问题描述
用高精度方法,求s=1+2+3+...+n的精确值(n以一般整数输入)
Input
文件输入仅一行,输入n
Output
s的值。
Sample Input
10
Sample Output
55
【题解】
就是高精度加单精度,加单精度的时候在第一位加上这个数字就好,然后从1到l进行一轮的进位即可。最后逆序输出。、
【代码】
#include <cstdio> int a[100],n,l = 1; void input_data() { scanf("%d",&n); } void get_ans() { for (int i = 1;i <= 99;i++) //先给每个位上的数置0 a[i] = 0; for (int i = 1;i <= n;i++) //从1 累加到 n { a[1] += i; //直接在个位上递增i for (int i = 1;i <= l;i++) //然后来处理进位问题 直接 + / 然后%一下就好 { a[i+1] += (a[i]/10); a[i] = a[i] % 10; } while (a[l+1] > 0) //延长位数。用一个while和l就能搞定 { l++; a[l+1] += (a[l] / 10); a[l] = a[l] % 10; } } } void output_ans() //最后要逆序输出答案。 { for (int i = l;i >= 1;i--) printf("%d",a[i]); } int main() { input_data(); get_ans(); output_ans(); return 0; }