gpt4 book ai didi

c - 通过测试 c 中的总和或乘积的组合形成的奇怪输出

转载 作者:太空狗 更新时间:2023-10-29 16:11:47 24 4
gpt4 key购买 nike

我有一个简单代码的问题。我想要 EX 4 -> 0+4 1+3 2+2 3+1 4+0 的所有产品和特定数字的总和。为了总和,所以我编写了这段代码来做到这一点:

 #include <stdio.h>
#include <stdlib.h>

typedef struct{
unsigned int x;
unsigned int y;
}str;

const int MAX = 200000;

int main(int argc,char *argv[]){
int s=atoi(argv[1]);
if(s<0 || s>MAX){
printf("errore nummero incompatibile!\n");
exit(-1);
}
str sum;
int n=MAX;
for (sum.x=0;sum.x<n;sum.x++){
for (sum.y=0;sum.y<n;sum.y++){
if(strcmp(argv[2],"+")==0){
if(sum.x+sum.y==s){
printf("%d + %d = %d\n",sum.x,sum.y,s);
}
}else{
if(sum.x*sum.y==s){
printf("%d * %d = %d\n",sum.x,sum.y,s);
}
}
}
}
exit(-1);
}

argv[1] 是要测试的数字,argv[2] 是模式(Sum 或 product)

这里是 44 * 的乘积输出:

1 * 44 = 44
2 * 22 = 44
4 * 11 = 44
11 * 4 = 44
22 * 2 = 44
44 * 1 = 44
25266 * 169990 = 44
33998 * 126330 = 44
42110 * 101994 = 44
50532 * 84995 = 44
50997 * 84220 = 44
63165 * 67996 = 44
67996 * 63165 = 44
84220 * 50997 = 44
84995 * 50532 = 44
101994 * 42110 = 44
126330 * 33998 = 44
167378 * 179622 = 44
169990 * 25266 = 44
179622 * 167378 = 44`

它给出了正确的输出,但随后它开始给出更多的数字。每次我运行它时,这些都是相同的。这是什么,我该如何阻止它?

最佳答案

您正在遍历每个数字直到 MAX,导致您沿途溢出 (See vitaut's answer for the explaination of your issue and how to prevent overflow in your case, he explained that very well.)。那没有必要。当您尝试找到 2 个整数相乘的每个组合时,您只需要迭代直到所述数字,如果数字太大,则迭代到 MAX。尝试改变

  int n=MAX;

作者:

 int n = s;
if (s > MAX)
int n=MAX;

关于c - 通过测试 c 中的总和或乘积的组合形成的奇怪输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30033527/

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