输入不够

时间:2015-12-04 05:30:42

标签: c

INPUT

整数(0≤整数<10 ^ 1,000,000)

输出

查找输入mod 3并输入mod 11

实施例

main(){

        int num;//problem here i try long long not pass because it not enough.

        scanf("%d",&num);

        printf("%d ",num%3);

        printf("%d",num%11);

}

2 个答案:

答案 0 :(得分:1)

&#34; C中的普通类型通常最多只能存储64位,因此您必须在数组中存储大数字,并自行编写数学运算。但是你不应该在这里重新发明轮子 - 你可以为此目的尝试GNU多精度算术库。&#34;

-AndiDog

来源:Store and work with Big numbers in C

答案 1 :(得分:0)

利用mod 3和mod 11可以轻松地一次链接一个数字。

#include<stdio.h>
#include<ctype.h>

void mod3_11(void) {
  int mod3 = 0;
  int mod11 = 0;
  int ch;
  while (isdigit(ch = fgetc(stdin))) {
    int digit = ch - '0';
    mod3 = (digit + mod3)%3;
    mod11 = (digit - mod11 + 11)%11;
  }
  printf("mod 3  = %d\n", mod3);
  printf("mod 11 = %d\n", mod11);
  fflush(stdout);
  }

int main(void) {
  mod3_11();
  return 0;
}

这适用于处理每个连续数字,代码采用前一个&#34; mod&#34; * 10

// math
mod_n <-- (10*mod_n + digit)%n

mod3 <-- (mod3*10 + digit) % 3
mod3 <-- (mod3*1 + mod3*3*3 + digit) % 3   
mod3 <-- (mod3 + 0 + digit) % 3    (mod3*3*3 % 3 is 0)
mod3 <-- (mod3 + digit) % 3

mod11 <-- (mod11*10 + digit) % 11
mod11 <-- (mod11*11 - mod11*1 + digit) % 11
mod11 <-- (mod11*11 - mod11 + digit + 11) % 11  (add 11 to avoid negative numbers)
mod11 <-- (-mod11 + digit + 11) % 11

为什么要加11? What's the difference between “mod” and “remainder”?