【问题标题】:How do I make this code work even for large numbers as inputs? [closed]即使对于作为输入的大量数字,如何使此代码也能正常工作? [关闭]
【发布时间】:2020-01-17 10:38:07
【问题描述】:

该程序运行良好,但在输入较大数字时出现错误。 这个问题的链接是https://www.hackerearth.com/practice/data-structures/arrays/multi-dimensional/practice-problems/algorithm/monk-and-operations/description/

#include<stdio.h>
#include<stdlib.h>
#define MAX(a,b) (((a)>(b))?(a):(b))
int main(){
    int m,n,i,j,matrsum,matcsum;
    scanf("%d %d",&m,&n);
    int a[m][n],v1,v2,v3,v4;
    for(i=0;i<m;i++){
        for(j=0;j<n;j++){
            scanf("%d",&a[i][j]);
        }
    }
    scanf("%d %d %d %d",&v1,&v2,&v3,&v4);
     for(i=0;i<m;i++){
        int rsum=0,risum=0,rusum=0;
        for(j=0;j<n;j++){
            rsum=rsum+abs(a[i][j]);
            risum+=abs(a[i][j]+v1);
            rusum+=abs(v2);
        }
        matrsum+=MAX(rsum,MAX(risum,rusum));
    }
    for(i=0;i<n;i++){
        int csum=0,cisum=0,cusum=0;
        for(j=0;j<m;j++){
            csum=csum+abs(a[j][i]);
            cisum+=abs(a[j][i]+v3);
            cusum+=abs(v4);
        }
        matcsum+=MAX(csum,MAX(cisum,cusum));
    }
    printf("%d ",MAX(matrsum,matcsum));  
} 

示例输入(最坏情况) 2 2
227790993 -762740567
57519048 -247119797
266086776 904261341 -872001509 212276239

【问题讨论】:

  • int 是一个有符号整数,在大多数平台上它是 32 位,这意味着它的范围约为正负二十亿。如果您只处理无符号数字,请使用unsigned,您的范围从零到略高于四十亿。对于更大的数字,unsigned long long 保证至少 64 位宽,并且可以处理非常大的数字。
  • 问题应该包含所有必要的信息。链接应该是补充的,不是必需的。编辑问题以包括数组的大小以及元素和总和的大小。

标签: c algorithm data-structures


【解决方案1】:

如果您只使用有符号整数,则可以使用 long int 而不是 int。

long 类型的大小至少为 4 个字节(32 位)。最小值为 -2,147,483,647,最大值至少为 +2,147,483,647。

你可以在这里查看一个信息丰富的帖子。What is the difference between "long", "long long", "long int", and "long long int" in C++?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 2014-02-20
    • 1970-01-01
    • 2021-05-23
    • 2019-10-02
    • 1970-01-01
    • 2014-03-16
    相关资源
    最近更新 更多