【问题标题】:how can i work with 16 digit integer type?我如何使用 16 位整数类型?
【发布时间】:2015-03-27 23:07:38
【问题描述】:

问题:http://codeforces.com/problemset/problem/486/A

输入:

1000000000000000

输出:

-1

答案:

500000000000000

检查日志:

wrong answer 1st numbers differ - expected: '500000000000000', found: '-1'

代码:

int main() {
    int a, b = 0, c = 0, d, i;

    scanf("%d", &a);
    for (i = 2 ; i <= a ; i++) {
         if (i % 2 == 0) {
             c = c + i;
         }
         if (i % 2 != 0) {
             b = b + i;
         }
     }
     d = c - b;
     d = d - 1;

     printf("%d", d);
     return 0;
}

【问题讨论】:

  • int64_tlong long。一个小提示:你能把方程转换成更省时吗?
  • 不,我的代码不适用于 long long ..你能为我安排代码吗??
  • 您可以将第一个和第二个数字 (-1 + 2 = 1) 和第三个与第四个 (-3 + 4 = 1) 组合起来,依此类推。你得到多少1s?现在想想最后,如果最后一个数字是偶数,还剩下什么,如果最后一个数字是奇数,还剩下什么?

标签: c types


【解决方案1】:

int 可以容纳的最大值是 2,147,483,647。将变量更改为unsigned long long,最多可以容纳超过18,446,744,000,000,000,000。 (您需要使用%llu 来读取/读取unsigned long long 变量)

此外,始终验证输入,这会暗示问题。

if(scanf("%d", &a) < 1) { //if we read less than one
    printf("FAILED TO READ INPUT");
    return 1;
}

最后,您从 2 迭代到 1000000000000000,无论循环内有什么,这都将花费很长时间。您需要使用更快的算法才能在一秒内完成。

【讨论】:

  • scanf() /printf() 说明符long long int/unsigned long long int"%lld"/"%llu"
  • @iharob:谢谢,我忽略了这一点
  • 但是 %I64d 或 %I64u 呢??
  • @Esterified:这些是在 %lld 发明之前的 Microsoft 扩展。 %lld 是取代它们的标准。那些旧的仍然可以工作,但%lld 更便携。
猜你喜欢
  • 2014-11-06
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2012-10-21
  • 2010-09-24
  • 2014-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多