gpt4 book ai didi

c++ - 为什么我的查找阶乘的 C++ 代码不起作用?

转载 作者:行者123 更新时间:2023-11-28 04:03:57 25 4
gpt4 key购买 nike

#include <iostream>
using namespace std;


int main() {
int n, t;
cin >> n;
int i;
for(i = 0; i < n; i++){
cin >> t;
int arr[200];
arr[0] = 1;
int j;
for(j = 1; j < 200; j++) arr[j] = 0;
int l = 1, k;
for(j = 1; j <= t; j++){
int rem = 0, flag = 0;
for(k = 0; k < l; k++){
int temp = (arr[k]*j) ;
arr[k] = (temp + rem) % 10;
rem = (temp+rem) / 10;
if(k == l-1 && rem != 0){
arr[l] = rem;
flag = 1;
}
}
if(flag) l++;
}
while(l--){
cout << arr[l];
}
if(i != n-1){
cout << "\n";
}
}
return 0;
}

问题陈述: 你被要求计算一些小的正整数的阶乘。输入:

一个整数n,1<=n<=100,表示测试用例的数量,后面是n行,每行包含一个整数t,1<=t<=100。输出:

对于输入的每个整数 n,显示一行包含 t 的值!

这对 t < 35 工作正常,但对 t >= 35 开始出错。还告诉我如何改进我的编码风格。我是编码新手。

案例一
示例输入:
2
1
35

实际输出:
1
-40427027-3-786144929666651337523200000000

预期输出:
1
10333147966386144929666651337523200000000

案例2
示例输入:
3
5
6
7

实际输出:
120
720
5040

预期输出:
120
720
5040

PS 对不起!,最初的问题改变了,因为我在计算 17 时忽略了浮点错误!来自科学计算器。现在,代码不适用于大于 34 的值

错误的部分原因是 rem 可以是 3 位数字,所以除以 10 是行不通的。需要注意 rem > 100

最佳答案

你的那部分代码看起来不对,因为它只循环到你的数字长度所以当有标志时它可能只增长一位数:

        for(k = 0; k < l; k++){
int temp = (arr[k]*j) ;
arr[k] = (temp + rem) % 10;
rem = (temp+rem) / 10;
if(k == l-1 && rem != 0){
arr[l] = rem;
flag = 1;
}
}
if(flag) l++;

它应该更短一些,例如:

   for(k = 0; k < l; k++) {
rem += arr[k] * j;
arr[k] = rem % 10;
rem /= 10;
if(k == l-1 && rem != 0) ++l;
}

关于c++ - 为什么我的查找阶乘的 C++ 代码不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59058623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com