这个算法有没有问题

P1009 [NOIP1998 普及组] 阶乘之和

Undertakers @ 2024-10-18 17:56:54

#include <stdio.h>

int main() {
    int n,i,j;
    double sum=0,mul;
    scanf("%d",&n);
    for( i = 1; i<=n; i++) {
        for(mul=1,j = 1; j<=i; j++) {
            mul*=j*1.0;
            if(j==i) break;
        }
        printf("%d!=%.0f ",i,mul);
        sum+=mul;
        printf("%.0f\n",sum);
    }
    printf("%.0f",sum);
    return 0;
}

by LionBlaze @ 2024-10-18 17:59:40

@Undertakers 没过就是有,过了就是没有。


by a18981826590 @ 2024-10-18 18:00:28

@Undertakers 十年 OI 一场空,不写高精见祖宗。


by 沐咕 @ 2024-10-18 18:06:04

@Undertakers 当你看向数据范围就会发现原来需要使用高精度

求关


by Undertakers @ 2024-10-18 19:28:27

@沐咕 高精度是什么意思?


by 沐咕 @ 2024-10-18 20:18:42

@Undertakers 6,建议自己上网搜


by AC_kkk0926 @ 2024-10-19 20:54:35

@Undertakers

AI回答:

C++中的高精度运算通常涉及到处理整数的大小超出标准整型(如int或long long)范围的情况。这可以通过以下几种方法实现:

字符串处理: 将大数表示为字符串,然后手动执行加法、减法、乘法、除法等运算。 库函数: 使用第三方库,如GMP或FastDoubleDouble库来实现高精度运算。 自己设计算法: 使用分治法、大数平方根算法等实现高精度运算。 下面是使用字符串处理实现一个简单的高精度整数加法示例:


#include <iostream>  
#include <string>  
#include <algorithm>  
using namespace std;  

// 高精度加法  
string precisionAddition(string num1, string num2) {  
    int len1 = num1.size(), len2 = num2.size();  
    if (len1 < len2) swap(num1, num2);  

    int carry = 0;  
    string result;  
    for (int i = len1 - 1; i >= 0 || carry; --i) {  
        int p1 = i < 0 ? 0 : num1[i] - '0';  
        int p2 = i < len2 - 1 ? num2[i + len1 - len2] - '0' : 0;  
        int sum = p1 + p2 + carry;  
        carry = sum / 10;  
        result.push_back((sum % 10) + '0');  
    }  

    reverse(result.begin(), result.end());  
    return result;  
}  

int main() {  
    string num1, num2;  
    cout << "请输入两个大整数(以空格分隔):" << endl;  
    cin >> num1 >> num2;  
    cout << "两数之和为:" << precisionAddition(num1, num2) << endl;  
    return 0;  
}  

|