整数(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);
}
答案 0 :(得分:1)
&#34; C中的普通类型通常最多只能存储64位,因此您必须在数组中存储大数字,并自行编写数学运算。但是你不应该在这里重新发明轮子 - 你可以为此目的尝试GNU多精度算术库。&#34;
-AndiDog
答案 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”?